查找仅在array1 javascript中可用的对象



这里有两个数组。我想获取仅在Array1中可用的值。某些场景

  1. 如果两者都有公共项,则返回空
  2. 如果两者都没有任何公共项,则返回array1的所有项
  3. 如果array1具有在数组2中不可用的item1,则仅返回item1

var Array1 = [{
id : 1,
name : 'item1'
}, {
id : 2,
name : 'item2'
}];
var Array2 = [{
id : 1,
name : 'item1',
expiredate : 2022
},
{   id : 3,
name : 'item3',
expiredate : 2022
}
];
// now want a result array3 which contains the item only available in array1. for above examplle item2

我做了一个基本上与Array不同的函数,但对进行了轻微修改

let Array1 = [{
id : 1,
name : 'item1'
}, 
{
id : 2,
name : 'item2'
}]
let Array2 = [{
id : 1,
name : 'item1',
expiredate: 2022
},
{
id : 3,
name : 'item3',
expiredate: 2022,
}
]
function arr_diff(a1, a2){
var a = [], diff = [];
for (var i = 0; i < a1.length; i++) {
a[a1[i].id] = true;
}
for (var i = 0; i < a2.length; i++) {
if (a[a2[i].id]) {
delete a[a2[i].id];
}
}
for (var k in a) {
a1.forEach(item => {

if(item.id == k) diff.push(item);
})
}
return diff;
}
let D = arr_diff(Array1, Array2)
console.log(D);

您想要的只是array1array2-的区别

var array1 = [{
id: 1,
name: 'item1'
}, {
id: 2,
name: 'item2'
}];
var array2 = [{
id: 1,
name: 'item1',
expiredate: 2022
},
{
id: 3,
name: 'item3',
expiredate: 2022
}
];
var array3 = array1.filter(b =>
!array2.some(s => s.id === b.id && s.name === b.name));
console.log(array3);

最新更新