簡體   English   中英

如何在具有匹配值的對象數組中刪除 object

[英]How to remove object in array of objects with matching values

我想檢查我的數組中是否存在具有匹配值的對象,如果它們匹配,請刪除索引最低的 object,因為這將是“舊”

我使用這種方法成功刪除了數組中的重復對象,但是當我得到這些對象的特定值時,我不確定

someFunction() {
  let cart = this.state.currentUser.cart
    const newCartArray = cart.filter((light, index) => {
      return index === cart.findIndex(obj => {
          obj.use === light.use
      })
    })
  cart = newCartArray
}

您可以使用Map並使用想要的密鑰存儲最后一個 object 並僅獲得最后存儲的對象。

 var array = [{ id: 1, index: 0 }, { id: 2, index: 1 }, { id: 3, index: 2 }, { id: 2, index: 3 }, { id: 3, index: 4 }, { id: 1, index: 5 }, { id: 4, index: 6 }, { id: 5, index: 7 }], result = Array.from(array.reduce((m, o) => m.set(o.id, o), new Map).values()); console.log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

如果您想保留原始順序,可以查看相同的 object 參考進行過濾。

 var array = [{ id: 1, index: 0 }, { id: 2, index: 1 }, { id: 3, index: 2 }, { id: 2, index: 3 }, { id: 3, index: 4 }, { id: 1, index: 5 }, { id: 4, index: 6 }, { id: 5, index: 7 }], map = array.reduce((m, o) => m.set(o.id, o), new Map), result = array.filter(o => o === map.get(o.id)); console.log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

let cart = this.state.currentUser.cart;
let index = cart.indexOf(light);
if( index != -1) {
    cart.splice( index,1);
}

或者如果您需要檢查 .use

let cart = this.state.currentUser.cart;
for( let i =0; i < cart.length; i++) {
    if( cart[i].use === light.use) {
        cart.splice(i,1);
        break;
    }
}

您可以過濾掉所有后續項目與相關屬性匹配的項目,如下所示:

const newCartArray = cart.filter((light, i, array) => {
  return !array.slice(i + 1).some(obj => obj.use === light.use);
})

這應該有效:

 someFunction() { let cart = this.state.currentUser.cart const newCartArray = cart.filter((light, index) => { return cart.slice(index + 1).findIndex(obj => { obj.use === light.use }) === -1; }) cart = newCartArray }

暫無
暫無

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

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