簡體   English   中英

使用過濾器從對象數組中刪除多個對象

[英]Remove multiple object from array of objects using filter

鑒於

someArray = [{name:"Kristian", lines:"2,5,10"},
             {name:"John", lines:"1,19,26,96"},
             {name:"Brian",lines:"3,9,62,36" }];

removeArray = [{name:"Kristian", lines:"2,5,10"},
             {name:"Brian",lines:"3,9,62,36" }];

如何從someArray刪除removeArray的對象? 我可以刪除一個對象:

johnRemoved = someArray.filter(function(el) {
return el.name !== "John";
});

但是,與其將someArray名稱與字符串進行比較,不如將它們與removeArray中的名稱進行比較。 可以使用第二種過濾器方法完成它,還是必須使用for循環?

您可以在this對象使用filter使用該filter ,該filter等於需要刪除的名稱Set為提高效率而Set ):

 someArray = [{name:"Kristian", lines:"2,5,10"}, {name:"John", lines:"1,19,26,96"}, {name:"Brian",lines:"3,9,62,36" }]; removeArray = [{name:"Kristian", lines:"2,5,10"}, {name:"Brian",lines:"3,9,62,36" }]; someArray = someArray.filter(function(obj) { return !this.has(obj.name); }, new Set(removeArray.map(obj => obj.name))); console.log(someArray); 

您只需要進行一些迭代即可:

johnRemoved = someArray.filter( obj => !removeArray.some( obj2 => obj.name === obj2.name ));
someArray.filter(i => !removeArray.map(j => j.name).includes(i.name));

或者,如果您不希望超越ES6的includes

someArray.filter(i => !removeArray.some(j => j.name === i.name));

或使用reduce

someArray.reduce((acc, i) => {
  !removeArray.some(j => j.name === i.name) && acc.push(i);
  return acc;
}, []);

過濾器一些

someArray.filter(function(item) {
    return !removeArray.some(function(r) { return r.name == item.name && r.lines == item.lines })
});

我喜歡這里給出的答案。 我也想添加自己的。

1-兩個Array.prototype.filter()方法,第一個用於迭代的過濾器:

removeArray.filter(function(ra) {
    someArray = someArray.filter(function(sa) {
        return sa.name !== ra.name;
    });
});

2-第一次迭代可以替換為for ... of循環

for (let item of removeArray){

3或通過Array.prototype.forEach()

removeArray.forEach(function(ra) {

4-如dubbhaAdamJonas所提到的, Array.prototype.some( ):

someArray.filter(i => !removeArray.some(j => j.name === i.name));

5-最后Trincot的答案對我來說很有趣:

someArray = someArray.filter(function(obj) {
  return !this.has(obj.name);
}, new Set(removeArray.map(obj => obj.name)));

這應該夠了吧。

const removed = someArray.filter((e) => {
    return removeArray.find(r => r.name === e.name) !== undefined;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM