我有一个包含重复项的数组:
nameList = [{name:"name1", filename:"filename1"}, {name:"name2", filename:"filename2"}, {name:"name3", filename:"filename2"}]
我只想保留唯一的项目,但只保留最后一个项目。我想要:
nameList = [{name:"name1", filename:"filename1"}, {name:"name3", filename:"filename2"}]
我已经尝试过:
var flags = {};
resultNameList = nameList.filter(function(entry) {
if (flags[entry.filename]) {
return false;
}
flags[entry.filename] = true;
return true;
});
但它只保留第一次出现的重复项。我怎样才能得到最后一次出现的情况?
请帮忙。谢谢。
最佳答案
减少由 filename
属性索引的对象,覆盖累加器中该键处的前一项(如果存在) - 这确保在所有迭代之后,对象的值仅由最新出现的项组成给定的文件名。然后取累加器的值:
const nameList = [{
name: "name1",
filename: "filename1"
}, {
name: "name2",
filename: "filename2"
}, {
name: "name3",
filename: "filename2"
}];
const output = Object.values(nameList.reduce((a, item ) => {
a[item.filename] = item;
return a;
}, {}));
console.log(output);
请注意,对象中的键值对必须用 :
分隔,而不是 =
。
下面评论中给出的输入看起来也可以按预期工作:
const nameList = [{
name: "name1",
filename: "filename1"
}, {
name: "name3",
filename: "filename2"
}];
const output = Object.values(nameList.reduce((a, item) => {
a[item.filename] = item;
return a;
}, {}));
console.log(output);
关于javascript - 如何在 Javascript 中获取重复数组的最后一次出现位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56437311/