首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Nodejs中的JSON对象数组中删除重复项

如何从Nodejs中的JSON对象数组中删除重复项
EN

Stack Overflow用户
提问于 2018-10-13 01:10:43
回答 2查看 1.9K关注 0票数 3

我试图根据以下JSON的id删除重复条目,但似乎无法正确解析json,我的JSON数组如下所示:

代码语言:javascript
复制
[ '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"57"},{"name":"sample","id":"acc"}]}\n',
  '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"},{"name":"sample","id":"ac"}]}\n',
  '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"},{"name":"sample","id":"ac"}]}\n',
  '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"}]}\n',
]

输出应该是

代码语言:javascript
复制
{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"57"},{"name":"sample","id":"acc"}]}

我的守则如下:

代码语言:javascript
复制
removeDups: async function(listent){
      for (i = 0; i < listent.length; i++){
        console.log(listent.length)
         for (j = 0; j < listent.length; j++){
           console.log(listent[j])
       }
        var standardsList = this.arrUnique(listent);
        console.log("standard", standardsList)
    }
    },

    arrUnique: function (arr) {
      var cleaned = [];
      arr.forEach(function(itm) {
          var unique = true;
          cleaned.forEach(function(itm2) {
              if (_.isEqual(itm, itm2)) unique = false;
          });
          if (unique)  cleaned.push(itm);
      });
      return cleaned;

      }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-13 04:13:29

希望这对你有用:https://jsfiddle.net/c0pkw5ju/

核心职能是:

代码语言:javascript
复制
var val = array.reduce(function (acc, val) {
    return acc.concat(val.entries)
}, [])

console.log(_.unique(val, function (v) {
    return v.id
}))

基本上,您需要将您的\n分离的JSON响应转换为JS对象,该对象可以按指示使用。如果这不起作用的话请告诉我。

输出:

代码语言:javascript
复制
[
  {
    "name": "sample",
    "id": "8d"
  },
  {
    "name": "sample",
    "id": "57"
  },
  {
    "name": "sample",
    "id": "acc"
  },
  {
    "name": "sample",
    "id": "50"
  },
  {
    "name": "sample",
    "id": "ac"
  }
]

最新情况:假设答复如下:

代码语言:javascript
复制
var response = ['{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"57"},{"name":"sample","id":"acc"}]}\n',
    '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"},{"name":"sample","id":"ac"}]}\n',
    '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"},{"name":"sample","id":"ac"}]}\n',
    '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"}]}\n',
]

如果您处理了如下所示的响应:

代码语言:javascript
复制
var array = response.map(function(val) {
    return JSON.parse(val.trim())
})

那么核心功能就会起作用。

票数 1
EN

Stack Overflow用户

发布于 2018-10-13 07:02:47

运行代码片段,您将看到与您在问题中提到的完全相同的输出。我希望这对你(和其他人)有帮助。:)

代码语言:javascript
复制
const data = ['{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"57"},{"name":"sample","id":"acc"}]}\n',
    '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"},{"name":"sample","id":"ac"}]}\n',
    '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"},{"name":"sample","id":"ac"}]}\n',
    '{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"50"}]}\n',
];

// Let us first format it correctly 
const formatted = data.map(x => {
    return JSON.parse(x.trim())
});

// Let's loop over our newly created array and push unique values into a new one

let uniqueNames = [];
let uniqueObj = [];

for(let i = 0; i < formatted.length; i++){    
    if(uniqueNames.indexOf(data[i]._id) === -1){
       uniqueObj.push(data[i])
       uniqueNames.push(data[i]._id);
       }        
    }

// Let's take that one step further and display it exactly as you wanted it to be :)
const iterator = uniqueObj.values();

for (const value of iterator) {
   console.log(value);
}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52788667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档