嗨,我正尝试使用id从对象数组中删除重复项,但是id为null,则该对象应包含这些null id并删除其他重复项
这是对象数组的示例:
const arr = [
{
id: 6652,
value: "erger"
},
{
id: 6652,
value: "sdfs"
},
{
id: 6653,
value: "sdgdfg"
},
{
id: 6000,
value: "trgd"
},
{
id: 6667,
value: "asdf"
},
{
id: 6667,
value: "fdg"
},
{
id: 6668,
value: "dfgr"
},
{
id: null,
value: "fg"
},
{
id: null,
value: "dfgdf"
},
{
id: null,
value: "fg"
},
{
id: null,
value: "dfgdf"
}
];
以下是finalResult
array = [{
id: 6652
value: "sdfs"
},
{
id: 6653
value: "sdgdfg"
},
{
id: 6000
value: "trgd"
},
{
id: 6667
value: "fdg"
},
{
id: 6668
value: "dfgr"
},
{
id: null
value: "fg"
},
{
id: null
value: "dfgdf"
},
{
id: null
value: "fg"
},
{
id: null
value: "dfgdf"
}
]
在上述结果中,由于6652和6667是重复项,因此将其删除,但保留了空ID,因为我不想删除空ID并删除其他重复值。
下面是我要使用的逻辑,但是如果id为null则不起作用
array = array.filter((v,i,a)=> a.findIndex(t =>(v.id!==空&& t.id === v.id))=== i)
答案 0 :(得分:0)
<div class="article">
<div class="article__textbox">
<h1 class="article__textbox__heading">Learning BEM </h1>
<p class="article__textbox__subheading">The Block, Element, Modifier methodology</p>
<span class="article__textbox__author">John Doe</span>
</div>
</div>
<div class="article">
<div class="article__textbox">
<h1 class="article__textbox__heading">Mastering CSS BEM Principle </h1>
<p class="article__textbox__subheading">The Block, Element, Modifier methodology</p>
<span class="article__textbox__author article__textbox__author--premium">Jeanne Doe</span>
</div>
</div>
创建一个单独的对象来跟踪遇到的对象ID,在这种情况下为const filterKeys = {};
const filtered = arr.reduce((acc, item) => {
if (item.id === null || !(item.id in filterKeys)) {
filterKeys[item.id] = true;
acc.push(item);
}
return acc;
}, []);
。
由于filterKeys
是一个数组,请执行reduce来迭代该数组。如果array
中的id
是nil或找不到,请将该项目推入累加器并返回它以进行下一次迭代。由于我们不在乎null为null的id,因此它们不会起作用,因此不会被滤除。
答案 1 :(得分:0)
使用以下我测试过的代码对您的对象数组进行工作:
arr.forEach(function (item) {
if (item.id == null) {
result.push(item);
}
else {
var index = result.findIndex(x => x.id == item.id);
if (index == -1)
{
result.push(item);
}
}
});
console.log(result)
答案 2 :(得分:-1)
您可以尝试一下-
const array = [{ id: 6652, value: 'erger' },{ id: 6652, value: 'sdfs' },{ id: 6653, value: 'sdgdfg' },{ id: 6000, value: 'trgd' },{ id: 6667, value: 'asdf' },{ id: 6667, value: 'fdg' },{ id: 6668, value: 'dfgr' },{ id: null, value: 'fg' },{ id: null, value: 'dfgdf' },{ id: null, value: 'fg' },{ id: null, value: 'dfgdf' },];
let index = 0;
const result = Object.values(
array.reduce(
(acc, curr) =>
curr.id === null ? { ...acc, [index++]: curr } : { ...acc, [curr.id]: curr },
{}
)
);
console.log(result);
.as-console-wrapper {min-height: 100%; top: 0}