Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 通过与其他数组对象进行比较筛选数组对象_Jquery_Arrays - Fatal编程技术网

Jquery 通过与其他数组对象进行比较筛选数组对象

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 }, {

我有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,并根据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循环并进行比较的问题。但我认为还有其他简单的方法