Jquery 通过与其他数组对象进行比较筛选数组对象
我有2个数组,其中一个具有以下格式Jquery 通过与其他数组对象进行比较筛选数组对象,jquery,arrays,Jquery,Arrays,我有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 }, {
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,并根据Id从obj2中删除不在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
}]
因此,我保留了obj 2中的1和2,并删除了未按相同顺序列出的项目5和6,即obj1
我试过使用for循环和使用slice,结果没有结果。帮点忙就好了
感谢使用
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);
});
});
};
看看这些方法是如何工作的
您可以使用映射功能根据条件筛选项目,并使用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;
}
}
});
@Tushar我将更新我在另一个for上尝试for循环并进行比较的问题。但我认为还有其他简单的方法