我目前有一組基于唯一 ID 和唯一名稱一起過濾的物件:
初始輸入:
const data = [
{
id: 1234,
name: "Name1"
},
{
id: 1234,
name: "Name1"
},
{
id: 1234,
name: "Name2"
},
{
id: 1234,
name: null
},
{
id: 5678,
name: "Name3"
},
{
id: 5678,
name: "Name3"
},
{
id: 5678,
name: null
},
{
id: 9999,
name: null
},
{
id: 9999,
name: null
},
];
data.filter((value, index, self) => {
return (
self.findIndex(
(v) =>
v.id === value.id &&
v.name=== value.name
) === index
);
});
[
{
id: 1234
name: "Name1"
},
{
id: 1234
name: "Name2"
},
{
id: 1234
name: null
},
{
id: 5678
name: null
},
{
id: 5678
name: "Name3"
},
{
id: 9999
name: null
},
]
但是,某些 Id 沒有任何重復項,我想洗掉所有與空名稱相關的物件,除了 id 不重復并且如下所示:
[
{
id: 1234
name: "Name1"
},
{
id: 1234
name: "Name2"
},
{
id: 5678
name: "Name3"
},
{
id: 9999
name: null
},
]
目前,具有空名稱的重復 ID 仍然存在。
uj5u.com熱心網友回復:
我將您實作的過濾部分保留為中間輸出。使用它我得到了每個 id 的計數。然后使用我從中間陣列中過濾掉,如果計數> 1并且有一個空名稱,我將其洗掉。
const data = [{id: 1234,name: "Name1"},{id: 1234,name: "Name1"},{id: 1234,name: "Name2"},{id: 1234,name: null},{id: 5678,name: "Name3"},{
id: 5678,name: "Name3"},{id: 5678,name: null},{id: 9999,name: null},{id: 9999,name: null},];
//filtering out duplicates
let a = data.filter((value, index, self) => {
return (
self.findIndex(
(v) =>
v.id === value.id &&
v.name=== value.name
) === index
);
});
//get count for ids in partially filtered
let idcount = a.reduce((acc,curr) => {
if(!acc[curr.id])acc[curr.id] = 0
acc[curr.id] = 1
return acc;
},{})
//remove the duplicate nulls
let final = a.filter((el) => {
return !(idcount[el.id]>1 && el.name===null)
})
console.log(final)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/427181.html
