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