首页 > 解决方案 > 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' }
    ]

我怎样才能做到这一点 ?请帮忙

标签: node.jsjson

解决方案


您可以简单地反转数组并执行您想要的操作并反转结果以匹配您的预期结果。

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);

推荐阅读