比较两个数组对象的value,取出不同对象

let A = [
            {id:1,name:"张三",address:"北京"},
            {id:2,name:"李四",address:"上海"},
            {id:3,name:"赵信",address:"召唤师峡谷"}
        ]
        let B = [
            {id:1,name:"张三",address:"北京"},
            {id:2,name:"李四",address:"北京"},
            {id:3,name:"德玛西亚",address:"召唤师峡谷"},
            {id:4,name:"李白",address:"王者峡谷"}
        ]

假设A为原数组,b是我们修改后的数组,B数组相比于A数组里面的对象value有不同的就取出当前对象,B数组有新增的请况也取出当前对象

阅读 3.7k
3 个回答
function pickDifference(a, b) {
    const values = a.reduce((res,v) => res.add(Object.values(v).join()), new Set)
    return b.filter(v => !values.has(Object.values(v).join()))
}
pickDifference(A,B)
已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。
const diff = (arr1, arr2) => {
  const ans = [];
  const map = new Map();

  for (let i = 0; i < arr1.length; ++i) {
    map.set(arr1[i].id, arr1[i]);
  }

  const hasChanged = (obj1, obj2) => {
    const keys = Object.keys(obj2);

    for (const key of keys) {
      if (obj2[key] !== obj1[key]) return true;
    }

    return false;
  };

  for (let i = 0; i < arr2.length; ++i) {
    const old = map.get(arr2[i].id);

    if (!old) ans.push(arr2[i]);
    else if (hasChanged(old, arr2[i])) {
      ans.push(arr2[i]);
    }
  }

  return ans;
};

突然冒出的思路

const result = B.filter(item => !JSON.stringify(A).includes(JSON.stringify(item)))

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题