javascript - 如何在 Javascript 中获取重复数组的最后一次出现位置

标签 javascript arrays

我有一个包含重复项的数组:

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/

相关文章:

javascript - 使用正则表达式从字符串中提取值

javascript - IE 11 错误 - 访问被拒绝 - XMLHttpRequest

ios - [__NSCFString objectForKey :]: crash on textfield search

java - 字符串与另一个字符串重叠

javascript - 如何: javascript fade in fade out text

javascript - 在gisMap上画一个圆

javascript - 检查 dijit.form.Validation TextBox 是否在验证器中具有焦点

java - Java 中的随机数生成

javascript - 对数组对象进行降序排序(最大长度优先。)

java - 数组元素不同于平均值且小于数字