我有2个阵列,格式低于
var obj1 = [{
"Name": "Test1",
"id": 3
}, {
"Name": "Test2",
"id": 4
}];
和另一个
var obj2 = [{
"visible": "true",
"id": 1
}, {
"visible": "true",
"id": 2
}, {
"visible": "true",
"id": 3
}, {
"Name": "Test3",
"id": 4
}, {
"visible": "true",
"id": 5
}, {
"visible": "true",
"id": 6
}];
我需要比较obj1和obj2,并从obj2中删除基于Id的不在obj1中的项目。并且总是在obj2中我的id 1和2不应该被删除。
我最后的o / p应该是
var output = [{
"visible": "true",
"id": 1
}, {
"visible": "true",
"id": 2
}, {
"visible": "true",
"id": 5
}, {
"visible": "true",
"id": 6
}]
所以我保留了1&来自obj 2的2和删除的未列出的项目5和6是obj1,顺序相同。
我已经尝试过循环和使用切片而最终没有在哪里。一些帮助会很棒
由于
答案 0 :(得分:0)
使用Array.prototype.some
方法而不是Array.prototype.filter
方法来比较和调整数组。
这是一个功能:
function compareArrays() {
//use filter method to create a new array after iteration of obj2
return obj2.filter(function (obj2Item) {
//Use some method to iterate obj1
return obj1.some(function (obj1Item) {
//Exclude desired items here
return (obj1Item.id === obj2Item.id) || (obj2Item.id === 1) || (obj2Item.id === 2);
});
});
};
了解这些方法的工作原理。
答案 1 :(得分:0)
您可以使用map函数根据条件和indexOf过滤项目以检查项目是否存在。
var obj1 = [{
"Name": "Test1",
"id": 3
}, {
"Name": "Test2",
"id": 4
}];
var obj2 = [{
"visible": "true",
"id": 1
}, {
"visible": "true",
"id": 2
}, {
"visible": "true",
"id": 3
}, {
"Name": "Test3",
"id": 4
}, {
"visible": "true",
"id": 5
}, {
"visible": "true",
"id": 6
}];
var filterObject = $.map(obj2, function (v){
if (v.id == 1 || v.id == 2) {
return v;
}
else {
var ids2 = $.map(obj1, function (vId){
return vId.id;
});
if (ids2.indexOf(v.id) != -1) {
return v;
}
}
});