我有一个对象数组(所有对象类型都相同)。我有另一个相同对象类型的数组,我想用它来告诉我从第一个数组中删除哪些对象。除了循环遍历所有属性并比较它们以找到第一个数组中与第二个数组中的元素100%匹配然后从第一个数组中删除的元素之外,还有一种简单的方法吗?
我基本上是在一个对象数组上做一个jQuery.grep(),这个grep生成的数组我要从传入它的数组中删除。
答案 0 :(得分:2)
不是使用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;
});
答案 1 :(得分:0)
如果它是一个需要从另一个数组中删除的值数组,那么循环遍历数组真的很容易。
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;
}
}
上述函数包含一个参数,用于知道数组中只有单个值的实例。