我有一个对象数组(所有相同的对象类型)。我有另一个相同对象类型的数组,我想用它来告诉我要从第一个数组中删除哪些对象。除了遍历所有属性并比较它们以找到第一个数组中与第二个数组中的元素 100% 匹配的元素然后从第一个数组中删除之外,是否还有一种简单的方法可以做到这一点?
我基本上是在一个对象数组上执行 jQuery.grep() 以及从这个 grep 生成的数组,我想从传递给它的数组中删除。
我有一个对象数组(所有相同的对象类型)。我有另一个相同对象类型的数组,我想用它来告诉我要从第一个数组中删除哪些对象。除了遍历所有属性并比较它们以找到第一个数组中与第二个数组中的元素 100% 匹配的元素然后从第一个数组中删除之外,是否还有一种简单的方法可以做到这一点?
我基本上是在一个对象数组上执行 jQuery.grep() 以及从这个 grep 生成的数组,我想从传递给它的数组中删除。
不要使用 jQuery.grep() 来获取一个新数组,而是用jQuery.map()替换它,如果必须保留它,则返回相同的对象,如果要删除它,则返回 null。
例如,如果您的代码是
var toBeDeleted = $.grep(array, function(val) {
return condition(val);
});
将其更改为
array = $.map( array, function(val) {
if(condition(val))
return null;
return val;
});
如果它只是一个需要从另一个数组中删除的值数组,那么遍历数组真的很容易。
function deleteMatchingValues( target, toBeDeleted, oneMatch ) {
var i = target.length, j = toBeDeleted.length;
while( i-- ) {
while( j--) {
if( target[i] === toBeDeleted[j] ) {
target.splice(i,1);
if( oneMatch ) { break; }
}
}
j = toBeDeleted.length;
}
}
上面的函数包含一个参数,当您知道数组中只有单个值实例时。