vue 如何判断一个数组包含另一个数组?

let arr1 = [
    {id: 1, name: 'A'},
    {id: 2, name: 'B'},
    {id: 3, name: 'C'},
    {id: 4, name: 'D'}
]
let arr2 = [
    {id: 1, name: 'A'},
    {id: 2, name: 'B'}
]

vue如何判断arr1包含arr2?
阅读 4.9k
4 个回答

我有一个不成熟的方法 😂

JSON.stringify(arr1).includes(JSON.stringify(arr2))

如果id是唯一的话,可以这么做:

const ids = arr1.map(i => i.id)
const hasSameItem = arr2.some(item => ids.includes(item.id))

上面这个是判断是否含有相同item,如果是判断完全包含的话需要把some换成every

简单循环版本就是这样,可能循环比较多,还可以优化,比如has2为false, 那就没必要再走has1了,另外就是has2和has1的判断key可能有重复项,也可以优化


arr2.every(item2 => {
  const keys2Arr = Object.keys(item2);
  return arr1.some(item1 => {
    const keys1Arr = Object.keys(item1);
    const has2 = keys2Arr.every(x => item2[x] === item1[x]);
    const has1 = keys1Arr.every(x => item2[x] === item1[x]);
    return has1 && has2;
  });
});
arr2.every(({id})=>arr1.find(item=>item.id === id))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题