如果多维数组中不存在打字稿,则打字稿会从数组中删除值

时间:2020-06-19 11:05:40

标签: javascript arrays typescript

我有一维,并且有一个对象数组

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

任何帮助将不胜感激。

2 个答案:

答案 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)