使用 underscore.js 从数组中删除多个项目?
Remove Multiple Items from Array using underscore.js?
我有这个:
var arrA = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
我有另一个数组:
var arrB = [{id:1,other:'c'},{id:3,other:'d'}];
如何使用 underscore.js 从 arrA 中删除与 arrB 具有相同 属性 ID 的项目?
预期结果应该是:
arrA = [{id:2, name:'b'}];
谢谢,
Using Array#filter
and Array#findIndex
var output = arrA.filter((el) => {
return arrB.findIndex((elem) => {
return elem.id == el.id;
}) == -1;
});
一个班轮:
arrA.filter((el) => (arrB.findIndex((elem) => (elem.id == el.id)) == -1));
var arrA = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
var arrB = [{
id: 1,
other: 'c'
}, {
id: 3,
other: 'd'
}];
var op = arrA.filter(function(el) {
return arrB.findIndex(function(elem) {
return elem.id == el.id;
}) == -1;
});
console.log(op);
或使用Array#find
var arrA = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
var arrB = [{
id: 1,
other: 'c'
}, {
id: 3,
other: 'd'
}];
var op = arrA.filter(function(el) {
return !arrB.find(function(elem) {
return elem.id == el.id;
});
});
console.log(op);
像这样
var arrA = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var arrB = [{id:1,other:'c'},{id:3,other:'d'}];
var keys = _.keys(_.indexBy(arrB, "id"));
var result = _.filter(arrA, function(v) {
return !_.contains(keys, v.id.toString());
});
console.log(result)
希望对您有所帮助。
在纯 javascript 中,您可以使用 forEach()
循环和 splice()
删除对象,如果在其他数组中找到 id
。
var arrA = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var arrB = [{id:1,other:'c'},{id:3,other:'d'}];
var b = arrB.map(e => e.id);
arrA.forEach(function(e, i) {
if(b.indexOf(e.id) != -1) arrA.splice(i, 1);
});
console.log(arrA);
听起来你想要不同,但不幸的是,这对对象不起作用。相反,你可以试试这个:
arrA = _.filter(arrA, function(obj){
return !_.findWhere(arrB, {id: obj.id});
});
您可以使用内置的 filter 和 find 函数在没有下划线的情况下执行此操作。
var arrA = [{id:1,name:'a'}, {id:2,name:'b'}, {id:3,name:'c'}];
var arrB = [{id:1,other:'c'}, {id:3,other:'d'}];
var res = arrB.reduce((acc, b) => {
return acc.filter(({id}) => id !== b.id);
}, arrA);
// [{id:2,name:'b'}]
console.log(res);
我有这个:
var arrA = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
我有另一个数组:
var arrB = [{id:1,other:'c'},{id:3,other:'d'}];
如何使用 underscore.js 从 arrA 中删除与 arrB 具有相同 属性 ID 的项目?
预期结果应该是:
arrA = [{id:2, name:'b'}];
谢谢,
Using
Array#filter
andArray#findIndex
var output = arrA.filter((el) => {
return arrB.findIndex((elem) => {
return elem.id == el.id;
}) == -1;
});
一个班轮:
arrA.filter((el) => (arrB.findIndex((elem) => (elem.id == el.id)) == -1));
var arrA = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
var arrB = [{
id: 1,
other: 'c'
}, {
id: 3,
other: 'd'
}];
var op = arrA.filter(function(el) {
return arrB.findIndex(function(elem) {
return elem.id == el.id;
}) == -1;
});
console.log(op);
或使用Array#find
var arrA = [{
id: 1,
name: 'a'
}, {
id: 2,
name: 'b'
}, {
id: 3,
name: 'c'
}];
var arrB = [{
id: 1,
other: 'c'
}, {
id: 3,
other: 'd'
}];
var op = arrA.filter(function(el) {
return !arrB.find(function(elem) {
return elem.id == el.id;
});
});
console.log(op);
像这样
var arrA = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var arrB = [{id:1,other:'c'},{id:3,other:'d'}];
var keys = _.keys(_.indexBy(arrB, "id"));
var result = _.filter(arrA, function(v) {
return !_.contains(keys, v.id.toString());
});
console.log(result)
希望对您有所帮助。
在纯 javascript 中,您可以使用 forEach()
循环和 splice()
删除对象,如果在其他数组中找到 id
。
var arrA = [{id:1,name:'a'},{id:2,name:'b'},{id:3,name:'c'}];
var arrB = [{id:1,other:'c'},{id:3,other:'d'}];
var b = arrB.map(e => e.id);
arrA.forEach(function(e, i) {
if(b.indexOf(e.id) != -1) arrA.splice(i, 1);
});
console.log(arrA);
听起来你想要不同,但不幸的是,这对对象不起作用。相反,你可以试试这个:
arrA = _.filter(arrA, function(obj){
return !_.findWhere(arrB, {id: obj.id});
});
您可以使用内置的 filter 和 find 函数在没有下划线的情况下执行此操作。
var arrA = [{id:1,name:'a'}, {id:2,name:'b'}, {id:3,name:'c'}];
var arrB = [{id:1,other:'c'}, {id:3,other:'d'}];
var res = arrB.reduce((acc, b) => {
return acc.filter(({id}) => id !== b.id);
}, arrA);
// [{id:2,name:'b'}]
console.log(res);