js 两个数组比较 拿出相同数据跟不相同得值

const  arr1 = ['1','2','3','5']
const  arr2 = 
    [
        {
            id:'1',
        },
        {
            id:'2',
        },
        {
            id:'3',
        },
        {
            id:'4',
        }
    ]

需求就是 arr1 跟 arr2比较 如果arr2得ID 等于arr1 得话 就把等于得arr2放到新数组中 如果有不等于的话把arr1不等于arr2得 值放到一个新数组中

结果就是要  
相等数组:是arr2  id [{id:'1'},{id:'2'},{id:'3'}]
           不相等数组:是 arr1 [5]
阅读 6.2k
2 个回答

根据 arr2 建个表,遍历 arr1 去查表就好啊

const arr1 = ["1", "2", "3", "5"];
const arr2 = [
    { id: "1", },
    { id: "2", },
    { id: "3", },
    { id: "4", }
];

const map = new Map(arr2.map(m => [m.id, m]));
const [a2, a1] = arr1.reduce(([a2, a1], id) => {
    if (map.has(id)) {
        a2.push(map.get(id));
    } else {
        a1.push(id);
    }
    return [a2, a1];
}, [[], []]);

console.log(a1, a2);
const  arr1 = ['1','2','3','5']
    const  arr2 = [
            {
                id:'1',
            },
            {
                id:'2',
            },
            {
                id:'3',
            },
            {
                id:'4',
            }
        ]
    const newArr = [];
    const newArr1 = [];

    arr2.forEach(item => {
        if (arr1.some(it => it === item.id)) {
            newArr.push(item)
        }
        
    })
    arr1.forEach(item => {
        if (arr2.every(it => it.id !== item)) {
            newArr1.push(item)
        }    
    })
    console.log(newArr)
    console.log(newArr1)

我的想法是这样的仅供参考

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