通过与其他Array对象进行比较来过滤Array对象

时间:2015-11-04 07:06:58

标签: 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
}, {
    "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,顺序相同。

我已经尝试过循环和使用切片而最终没有在哪里。一些帮助会很棒

由于

2 个答案:

答案 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);
            });

        });   

    };

了解这些方法的工作原理。

Array.prototype.filter

Array.prototype.some

答案 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;
        }
    }
});