Найти объект массива по заданному значению поля - PullRequest
0 голосов
/ 26 мая 2018

Предположим, есть два массива, подобных этому:

const element = ['abc', 'def']`

const total = [
  { _id: 'foo', something: 'else' }
  { _id: 'abc' },
  { _id: 'bar' },
  { _id: 'def' }
]

Мне нужно найти элементы элемента в общем массиве и вернуть значение индекса.Таким образом, результат должен быть

[1, 3]

Я думал об использовании цикла и поиска с помощью indexOf, но это не правильный путь:

element.forEach(e => {
  total.indexOf(e)
})

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы можете сопоставить element с переменной e и использовать Array.prototype.findIndex() в массиве total, чтобы найти индекс первого словаря, который содержит e в качестве одного изего значения, которые вы можете получить, используя Object.values:

const element = ['abc', 'def'];

const total = [
  { _id: 'foo', something: 'else' },
  { _id: 'abc' },
  { _id: 'bar' },
  { _id: 'def' }
];

const locations = element.map(e => total.findIndex(d => Object.values(d).includes(e)))

console.log(locations);
0 голосов
/ 26 мая 2018

Ваш первоначальный тест total.indexOf(e) не ищет объект со значением свойства _id, равным e - он ищет, равен ли объект строке 'abc' или 'def', что, конечно,никогда не соответствует действительности.

Вместо этого вы можете использовать reduce:

const element = ['abc', 'def'];

const total = [
  { _id: 'foo', something: 'else' },
  { _id: 'abc' },
  { _id: 'bar' },
  { _id: 'def' }
];

const foundIndicies = total.reduce((a, { _id }, i) => {
  if (element.includes(_id)) a.push(i);
  return a;
}, []);
console.log(foundIndicies);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...