我为此进行了大量搜索,但找不到符合我要求的内容。
我想删除所有重复项,但保留最后一个条目而不是第一个条目。
数组已经预先排序,我不想弄乱排序
所以看起来像这样:
[{
name:"Joe",
status:"foo1" },
{
name:"Joe",
status:"foo2"},
{
name:"Vani",
status:"foo5"
}]
预期输出如下:
[{
name:"Joe",
status:"foo2"},
{
name:"Vani",
status:"foo5"
}]
如果有人能帮助我,我会很感激!
答案 0 :(得分:4)
您可以简单地使用reduce
let arr = [{ name:"Joe", status:"foo1" }, { name:"Joe", status:"foo2"}, { name:"Vani", status:"foo5" }]
let op = arr.reduce((op,inp)=>{
op[inp.name] = inp
return op
},{})
console.log(Object.values(op))
答案 1 :(得分:1)
您可以使用ES6 Map
。从Docs起:
Map
对象保存键值对,并记住键的原始插入顺序。任何值(对象值和原始值)都可以用作键或值。
const data = [
{ name:"Joe", status:"foo1" },
{ name:"Joe", status:"foo2" },
{ name:"Vani", status:"foo5" }
];
const removeDupes = (arr, map = new Map()) => {
arr.forEach(o => map.set(o.name, o));
return [...map.values()];
};
console.log(removeDupes(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
尝试使用简单的forEach
,
const arr = [{ name:"Joe", status:"foo1" }, { name:"Joe", status:"foo2"}, {
name:"Vani", status:"foo5" }];
let result = {};
arr.forEach((val) => { result[val.name] = val; });
console.log(Object.values(result));
希望这对您有帮助...