按给定的字段值查找数组对象

时间:2018-05-26 07:01:42

标签: javascript ecmascript-6

假设有两个这样的数组:

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

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

我需要在total数组中找到元素项并返回索引值。 所以结果应该是

[1, 3]

我想过使用循环并使用indexOf查找,但这不是正确的方法:

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

2 个答案:

答案 0 :(得分:3)

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);




答案 1 :(得分:1)

您可以使用变量elemente上进行映射,并在total数组上使用Array.prototype.findIndex()来查找包含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);