我有一维,并且有一个对象数组
array1 = [1, 3, 15, 16, 18];
array2 = [
{ id: 1, dinner : pizza },
{ id: 15, dinner : sushi },
{ id: 18, dinner : hummus }
]
我正在尝试根据ID从array1中删除不在array2中的值。
我知道如何在两个一维数组中删除,但是当array2是对象数组时,我无法修改要删除的代码。
const array1 = array1.filter(id => array2.includes(id));
任何帮助将不胜感激。
答案 0 :(得分:1)
两个数组都是一维数组。
使用.some()
函数和.filter()
函数从array1
中删除那些在array2
中的任何对象中都不作为ID出现的数字
const array1 = [1, 3, 15, 16, 18];
const array2 = [
{ id: 1, dinner : 'pizza' },
{ id: 15, dinner : 'sushi' },
{ id: 18, dinner : 'hummus' }
]
const filteredArr = array1.filter(v => array2.some(o => v == o.id));
console.log(filteredArr);
答案 1 :(得分:1)
您可以先map
个所有ID,然后再filter
var array1 = [1, 3, 15, 16, 18];
var array2 = [
{ id: 1, dinner : "pizza" },
{ id: 15, dinner : "sushi" },
{ id: 18, dinner : "hummus" }
]
const Ids = array2.map(i=> i.id);
var res = array2.filter(i => Ids.includes(i.id));
var res2 = Ids.filter(i => array1.includes(i))// Or, just to get common Ids
console.log(res)
console.log(res2)
但是我建议您使用reduce
避免两次通过:
var array1 = [1, 3, 15, 16, 18];
var array2 = [
{ id: 1, dinner : "pizza" },
{ id: 15, dinner : "sushi" },
{ id: 18, dinner : "hummus" }
]
var res = array2.reduce((acc, {id})=>{
if(array1.includes(id)){
acc = [...acc, id]
}
return acc
},[]);
console.log(res)