let arr1 = [
{
is_gift: 1,
wg_id: 111,
},
{
is_gift: 1,
wg_id: 222,
},
{
is_gift: 1,
wg_id: 333,
},
];
let arr2 = [
{
is_gift: 1,
wg_id: 111,
},
{
is_gift: 3,
wg_id: 222,
},
{
is_gift: 5,
wg_id: 444,
},
{
is_gift: 4,
wg_id: 333,
},
{
is_gift: 2,
wg_id: 555,
},
];
let a = [];
let b = [];
arr2.forEach((element1) => {
arr1.forEach((element2) => {
if (element2.wg_id != element1.wg_id) {
a.push(element2);
}
if (element2.wg_id == element1.wg_id) {
b.push(element2);
}
});
});
console.log(a, 'a');
console.log(b, 'b');
为什么 if((element2.wg_id != element1.wg_id))
我打印的是全部数据,不会打印出不相等的数据。if((element2.wg_id == element1.wg_id))
却可以找出相等的数据?
因为你是遍历整个arr1,只要arr1里有和arr2当前遍历到的元素不一样的 就把它加入a
举个例子:
arr2当前是111,遍历arr1: 111(相同)->222(不同) 加入a
arr2当前是222,遍历arr1: 111(不同) 加入a
arr2当前是444,遍历arr1: 111(不同) 加入a
...
发现所有arr2里的所有元素的wg_id都满足以上情况,自然a里面就是全部元素了
补充:
直接用现成的轮子:
lodash的differenceBy
换成:
即可
结果为:
如果反过来要拿的是arr2里的arr1没有的元素,就换个位置:
结果为:
注意返回的是一个新的数组,和原来的两个数组无关
看了很多解法都是转成JSON字符串处理完再转回来,不嫌麻烦也可以照着搬一个
比如楼下贴出来的网址,生命苦短,我选择引库:)