我有以下对象:
[
{ name: "Peter", id: 25, job: "carpenter" },
{ name: "Peter", id: 25, job: "shelf maker" },
{ name: "John", no: 20, job: "student" },
{ name: "John", id: 20, job: "university student" },
{ name: "John", id: 20, job: "student at uni still" },
{ name: "Jack", id: 20, job: "university student" }
]
我想遍历这个数组,只要 name
和 id
相同,我只想保留一个条目,即最新出现的条目 在数组中,并丢弃所有其余的。我该怎么做?
我已经尝试过
for(let i=0;i<people.length;i++) {
const person = people[i];
const result = people.filter(person => person.id === id && person.name === name);
people[i] = person;
}
...但这不起作用。有什么想法我做错了吗?你会如何处理这个问题?
最佳答案
您可以使用reduceRight
构建新数组,从数组末尾开始迭代,也可以使用Map
作为累加器值来存储键-值
对。
const data = [{"name":"Peter","id":25,"job":"carpenter"},{"name":"Peter","id":25,"job":"shelf maker"},{"name":"John","no":20,"job":"student"},{"name":"John","id":20,"job":"university student"},{"name":"John","id":20,"job":"student at uni still"},{"name":"Jack","id":20,"job":"university student"}]
const map = data.reduceRight((r, e) => {
const key = `${e.name}|${e.id}`;
if (!r.has(key)) r.set(key, e);
return r;
}, new Map);
const uniq = [...map.values()];
console.log(uniq)
关于javascript - 从数组中删除所有具有特征 X 的元素,最新的除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57220770/