var arr1 = [{'a':'1'},{'b':'2'},{'c':'3'}];
var arr2 = [{'a':'1'},{'b':'2'},{'d':'4'}];
我想从arr2获取不在arr1中的元素。
我的输出将是[{'d':'4'}]
答案 0 :(得分:1)
我想到的最简单的方法是使用JSON.stringify:
var arr1 = [{'a':'1'},{'b':'2'},{'c':'3'}];
var arr2 = [{'a':'1'},{'b':'2'},{'d':'4'}];
stringArr1 = JSON.stringify(arr1);
var result = arr2.filter(
obj => !~stringArr1.indexOf(JSON.stringify(obj))
);
console.log(result);
但应该有更好的方法。
相当于:
var result = arr2.filter(
obj => !~stringArr1.indexOf(JSON.stringify(obj))
);
是常见的:
var result = arr2.filter(function (obj) {
var stringObj = JSON.stringify(obj);
if (stringArr1.indexOf(stringObj) != -1)
return true;
else
return false;
});
技巧很简单,基本上你需要知道3件事:
答案 1 :(得分:0)
您可以使用scanf()
,$.grep()
,.every()
Object.keys()
var arr1 = [{'a':'1'},{'b':'2'},{'c':'3'}];
var arr2 = [{'a':'1'},{'b':'2'},{'d':'4'}];
var res = $.grep(arr2, function(v) {
return arr1.every(function(_v) {
var keys = [Object.keys(v)[0], Object.keys(_v)[0]];
return keys[0] !== keys[1] && v[keys[0]] !== _v[keys[1]]
})
});
console.log(res)
答案 2 :(得分:0)
您可以对数组的每个元素使用JSON.stringify
,并使用哈希表进行检查
var arr1 = [{ 'a': '1' }, { 'b': '2' }, { 'c': '3' }],
arr2 = [{ 'a': '1' }, { 'b': '2' }, { 'd': '4' }],
arr3,
hash = Object.create(null);
arr1.forEach(function (o) {
hash[JSON.stringify(o)] = true;
});
arr3 = arr2.filter(function (o) {
return !hash[JSON.stringify(o)];
});
console.log(arr3);