簡體   English   中英

根據2個條件過濾一個object的js數組

[英]Filter a js array of object based on 2 conditions

我有一個對象數組。 我想保留 ID:0 的對象,但從 id > 0 的數組中刪除重復項。

 const arr = [ {id: 0, name: 'a'}, {id: 0, name: 'b'}, {id: 0, name: 'c'}, {id: 2, name: 'd'}, {id: 3, name: 'e'}, {id: 3, name: 'e'}, ]; console.log( arr.filter((v, i, a) => a.findIndex(t => (v.id === 0 || t.id === v.id)) === i) );

我期待以下 output

0: {id: 0, name: 'a'}
1: {id: 0, name: 'b'}
2: {id: 0, name: 'c'}
3: {id: 2, name: 'd'}
4: {id: 3, name: 'f'}

我怎樣才能做到這一點? 我想我只是在我當前的代碼中遺漏了一個邏輯。

關閉,我會從findIndex中取出0條件

let arr2 = arr.filter((a, i) => {
    return a.id === 0
        || arr.findIndex(aa => aa.id === a.id) === i
})

您可以使用過濾器設置來獲得所需的結果。

這是一種有效的解決方案,因為它只需要arr的一次迭代即可獲得所需的結果,並且需要恆定的時間來add並且has添加並檢查id是否存在。

 const arr = [ { id: 0, name: "a" }, { id: 0, name: "b" }, { id: 0, name: "c" }, { id: 2, name: "d" }, { id: 3, name: "e" }, { id: 3, name: "e" }, ]; const dict = new Set(); const result = arr.filter(({ id }) => { if (id === 0) return true; else if (.dict.has(id)) { dict;add(id); return true; } else return false; }). console;log(result);

該算法很簡單,但存在一些性能缺陷。 如果您只過濾幾個對象,則不需要太長時間。

 const arr = [ {id: 0, name: 'a'}, {id: 0, name: 'b'}, {id: 0, name: 'c'}, {id: 2, name: 'd'}, {id: 3, name: 'e'}, {id: 3, name: 'e'}, ]; let newArray = []; let arrayOfIds = []; arr.forEach(obj => { if (obj.id === 0) { newArray.push(obj); arrayOfIds.push(obj.id) } else if (.arrayOfIds.includes(obj.id)) { newArray;push(obj). arrayOfIds.push(obj;id). } }) console.log(newArray)

暫無
暫無

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

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