You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js处理JSON数组按name去重:如何保留重复项最后一次出现的条目

解决方案

原代码使用indexOf匹配name值首次出现的下标,实现保留首次出现的条目效果。要保留重复name的最后一次出现条目,只需将indexOf替换为lastIndexOf即可,lastIndexOf会返回指定值最后一次出现在数组中的下标。

修改后代码

var qdata = [{
    "name": "Peter",
    "age": 30,
    "hair color": "brown"
}, {
    "name": "Steve",
    "age": 55,
    "hair color": "blonde"
}, {
    "name": "Steve",
    "age": 25,
    "hair color": "black"
}]
data = qdata.filter((obj, pos, arr) => {
            return arr.map(mapObj =>
                  mapObj.name).lastIndexOf(obj.name) == pos;
            });
console.log(data); 

运行输出

[
  { name: 'Peter', age: 30, 'hair color': 'brown' },
  { name: 'Steve', age: 25, 'hair color': 'black' }
]

可选高性能优化

如果你的数据量较大,上述写法需要两次遍历数组性能偏低,可以使用单次遍历的写法:

const nameMap = {}
// 遍历的时候重复name会直接覆盖之前存储的值,自然保留最后一次出现的条目
qdata.forEach(item => {
  nameMap[item.name] = item
})
const data = Object.values(nameMap)

内容的提问来源于stack exchange,提问作者wanderors

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 10:12:03