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
相关产品推荐
相关产品推荐

