假设我有一个object []数组和一个数字数组。
let objects = [
{name: apple, id:1},
{name: banana, id:2},
{name: orange, id:5}
];
let numbers = [5, 1];
我要过滤对象数组,因此仅保留与数字匹配的id,并且应该更改顺序以匹配数字数组。
result should be [{name: orange, id:5} , {name: apple, id:1} ]
我可以使用javascript对象原型吗?还是可以使用lodash等第三方工具?
我尝试使用下面的代码,但是它保持原始列表的顺序:
result = object.filter(p => {
return numbers.includes(parseInt(p.id));
});
答案 0 :(得分:2)
您可以通过找到对象来映射所需的物品。
var objects = [{ name: 'apple', id: 1 }, { name: 'banana', id: 2 }, { name: 'orange', id: 5 }],
numbers = [5, 1],
result = numbers.map(id => objects.find(o => o.id === id));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:2)
它保持顺序,因为您可以遍历对象。如果要使用数字顺序,则必须遍历数字。
您没有说数字中的ID是否必须存在于对象中,即使一个流浪ID进入数字中,我的解决方案仍然有效
let result = []
numbers.forEach(
element => { if (objects.find(anObject => anObject.id == element))
result.push(objects.find(anObject => anObject.id == element)) })
答案 2 :(得分:1)
仅Array.map
和Array.find
。您不需要Array.filter
。
const items = [{name: 'apple', id:1}, {name: 'banana', id:2}, {name: 'orange', id:5}]
const numbers = [5, 1]
const result = numbers.map(n => items.find(i => i.id === n))
console.log(result)
由于要在numbers
上进行映射,因此result
数组的顺序与numbers
相同。
答案 3 :(得分:1)
checkObject(obj, arr) {
let x;
for (x in arr) {
if(arr[x].id == obj.id){
return true;
}
}
return false;
}
let items = [{name: 'apple', id:1}, {name: 'banana', id:2}, {name: 'orange', id:5}]
let numbers = [5, 1];
checkObject(items, numbers);
您可以尝试使用此功能来检查您的数字数组是否与对象数组匹配。