[英]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.