假设有两个这样的数组:
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)
})
答案 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)
您可以使用变量element
在e
上进行映射,并在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);