node.js - nodejs读取json并忽略第一次出现的重复值
问题描述
我有一个这样的json数据。
[{
"name": "Peter",
"age": 30,
"hair color": "brown"
}, {
"name": "Steve",
"age": 55,
"hair color": "blonde"
}, {
"name": "Steve",
"age": 25,
"hair color": "black"
}]
我的代码是,它将识别重复项并删除第二次出现。
代码是:
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).indexOf(obj.name) == pos;
});
console.log(data);
输出将是:
[
{ name: 'Peter', age: 30, 'hair color': 'brown' },
{ name: 'Steve', age: 55, 'hair color': 'blonde' }
]
在这里它删除第二个出现并保留第一个,但我想要得到的是删除第一个出现并保留第二个
[
{ name: 'Peter', age: 30, 'hair color': 'brown' },
{ name: 'Steve', age: 25, 'hair color': 'black' }
]
我怎样才能做到这一点 ?请帮忙
解决方案
您可以简单地反转数组并执行您想要的操作并反转结果以匹配您的预期结果。
qdata.reverse();
data = qdata.filter((obj, pos, arr) => {
return arr.map(mapObj => mapObj.name).indexOf(obj.name) == pos;
});
console.log(data.reverse());
如果您不想这样做,您可以使用下面的代码来获得所需的结果。
data = [];
qdata.map((i) => {
index = data.findIndex((u) => u.name === i.name);
if (index >= 0) {
data.splice(index, 1, i);
} else {
data.push(i);
}
});
console.log(data);
推荐阅读
- ios - 在 iOS 中检测以 YTPlayer 视图结尾的歌曲
- javascript - 函数不返回记录集
- jquery - 无法将从控制器传递到 thymeleaf html 的模型属性传递回另一个控制器
- javascript - 单击图像时如何隐藏图像并显示视频而不是它?使用 JavaScript
- css - CSS 溢出只滚动一个方向
- laravel - laravel Session::flush 不删除存储/框架/会话中的会话文件
- regex - 秒后的正则表达式捕获 /
- php - 构造函数内的属性值设置
- node.js - DocumentDB 连接问题
- angular - 从 RxJS5 更新到 RxJS6