Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.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
Javascript 如何基于第二个数组中的值从JS数组中删除对象_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript 如何基于第二个数组中的值从JS数组中删除对象

Javascript 如何基于第二个数组中的值从JS数组中删除对象,javascript,jquery,arrays,Javascript,Jquery,Arrays,嘿,伙计们,我正在尝试从与第二个数组中的值相匹配的数组中删除所有对象。请允许我用一些例子来解释 var originalObj = [ {"id":"88","name":"Lets go testing"}, {"id":"88","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108",

嘿,伙计们,我正在尝试从与第二个数组中的值相匹配的数组中删除所有对象。请允许我用一些例子来解释

var originalObj = [
{"id":"88","name":"Lets go testing"},
{"id":"88","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"},
{"id":"99","name":"Have fun boys and girls2"},
{"id":"108","name":"You are awesome!"}
]
目前,使用我的javascript代码,我只能从对象中删除一个指定的值以及任何具有该值的事件

var updatedObj= $.grep(originalObj , function(e){ 
             return e.id!= '88'; 
        });

console.log(updatedObj)
[
    {"id":"108","name":"You are awesome!"},
    {"id":"99","name":"Have fun boys and girls"},
    {"id":"108","name":"You are awesome!"},
    {"id":"99","name":"Have fun boys and girls2"},
    {"id":"108","name":"You are awesome!"}
]
我想要完成的是让.grep函数查找第二个数组,它看起来像这样

 var filterID = ["88","99"];
所以结果应该是这样的

//Needs updating
//var updatedObj= $.grep(originalObj , function(e){ 
//           return e.id!= '88'; <-- needs to match all filterID values instead
//      });

console.log(updatedObj)
[
    {"id":"108","name":"You are awesome!"},
    {"id":"108","name":"You are awesome!"},
    {"id":"108","name":"You are awesome!"}
]
//需要更新
//var updatedObj=$.grep(originalObj,函数(e){

//返回e.id!=“88”;您可以迭代数组中的所有值并以这种方式进行筛选

var updatedObj = originalObj;
for (var i in filterID) {
  updatedObj = $.grep(updatedObj , function(e){ 
    return e.id!= filterID[i];
  });
}
           var updatedObj = [
                {"id":"108","name":"You are awesome!"},
                {"id":"99","name":"Have fun boys and girls"},
                {"id":"108","name":"You are awesome!"},
                {"id":"99","name":"Have fun boys and girls2"},
                {"id":"108","name":"You are awesome!"}
            ],
            filterId = ["89","99"],result=[];
            $.each(updatedObj,function(index,item){
                if(filterId.indexOf(item.id) === -1){
                   result.push(updatedObj[index])
                }
            })
            console.log(result);

您可以迭代数组中的所有值,并以这种方式进行过滤

var updatedObj = originalObj;
for (var i in filterID) {
  updatedObj = $.grep(updatedObj , function(e){ 
    return e.id!= filterID[i];
  });
}
           var updatedObj = [
                {"id":"108","name":"You are awesome!"},
                {"id":"99","name":"Have fun boys and girls"},
                {"id":"108","name":"You are awesome!"},
                {"id":"99","name":"Have fun boys and girls2"},
                {"id":"108","name":"You are awesome!"}
            ],
            filterId = ["89","99"],result=[];
            $.each(updatedObj,function(index,item){
                if(filterId.indexOf(item.id) === -1){
                   result.push(updatedObj[index])
                }
            })
            console.log(result);

如果使用对象表示要筛选的关键点列表,则此操作将变得简单:

var toRemove = {
    88: true, 99: true;  // keys significant, values thereof irrelevant
};

var updatedObj = $.grep(originalObj, function(e) { 
    return !(e.id in toRemove);
});
对于短数组,这与双嵌套循环的效率大致相同,约为
O(n*m)
,其中
n
是要过滤的数组的大小,
m
是要删除的元素数)


但是,如果要筛选的值数组很大,则这将是
O(n)
(假设
中的
操作符在恒定时间内执行)

如果使用对象表示要筛选的键列表,这将变得简单:

var toRemove = {
    88: true, 99: true;  // keys significant, values thereof irrelevant
};

var updatedObj = $.grep(originalObj, function(e) { 
    return !(e.id in toRemove);
});
对于短数组,这与双嵌套循环的效率大致相同,约为
O(n*m)
,其中
n
是要过滤的数组的大小,
m
是要删除的元素数)


但是,如果要筛选的值数组很大,则这将是
O(n)
(假设
中的
运算符在恒定时间内执行)

使用
索引数组函数

var filterID = ["88","99"];
var updatedObj= $.grep(originalObj , function(e){ 
    return filterID.indexOf(e.id) === -1; 
});

使用
indexOf
array函数

var filterID = ["88","99"];
var updatedObj= $.grep(originalObj , function(e){ 
    return filterID.indexOf(e.id) === -1; 
});

您可以迭代数组中的所有值,并以这种方式进行过滤

var updatedObj = originalObj;
for (var i in filterID) {
  updatedObj = $.grep(updatedObj , function(e){ 
    return e.id!= filterID[i];
  });
}
           var updatedObj = [
                {"id":"108","name":"You are awesome!"},
                {"id":"99","name":"Have fun boys and girls"},
                {"id":"108","name":"You are awesome!"},
                {"id":"99","name":"Have fun boys and girls2"},
                {"id":"108","name":"You are awesome!"}
            ],
            filterId = ["89","99"],result=[];
            $.each(updatedObj,function(index,item){
                if(filterId.indexOf(item.id) === -1){
                   result.push(updatedObj[index])
                }
            })
            console.log(result);

您可以迭代数组中的所有值,并以这种方式进行过滤

var updatedObj = originalObj;
for (var i in filterID) {
  updatedObj = $.grep(updatedObj , function(e){ 
    return e.id!= filterID[i];
  });
}
           var updatedObj = [
                {"id":"108","name":"You are awesome!"},
                {"id":"99","name":"Have fun boys and girls"},
                {"id":"108","name":"You are awesome!"},
                {"id":"99","name":"Have fun boys and girls2"},
                {"id":"108","name":"You are awesome!"}
            ],
            filterId = ["89","99"],result=[];
            $.each(updatedObj,function(index,item){
                if(filterId.indexOf(item.id) === -1){
                   result.push(updatedObj[index])
                }
            })
            console.log(result);

如果它每次都覆盖它,当前迭代中的值每次都会被剥离,导致在迭代结束时剥离所有值…是的,我现在看到,如果它每次都覆盖它,那么当前迭代中的值每次都会被剥离,导致在迭代结束时剥离所有值对于迭代…是的,我现在看到了,对不起