node.js - 如何从 Nodejs 中的 JSON 对象数组中删除重复项

标签 node.js

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

[ '{"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',
]

输出应该是

{"entries":[{"name":"sample","id":"8d"},{"name":"sample","id":"57"},{"name":"sample","id":"acc"}]}

我的代码如下:

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;

      }

最佳答案

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

核心功能是:

var val = array.reduce(function (acc, val) {
    return acc.concat(val.entries)
}, [])

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

基本上,您需要将您的 \n 分隔的 JSON 响应转换为可以按指示使用的 JS 对象。如果这没有帮助,请告诉我。

输出:

[
  {
    "name": "sample",
    "id": "8d"
  },
  {
    "name": "sample",
    "id": "57"
  },
  {
    "name": "sample",
    "id": "acc"
  },
  {
    "name": "sample",
    "id": "50"
  },
  {
    "name": "sample",
    "id": "ac"
  }
]

更新: 假设响应是:

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',
]

如果您按照此处指示处理响应:

var array = response.map(function(val) {
    return JSON.parse(val.trim())
})

那么核心功能应该可以工作了。

关于node.js - 如何从 Nodejs 中的 JSON 对象数组中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52788667/

相关文章:

javascript - 世博会命令抛出 "Error: Cannot find module ' minizlib'"

javascript - 获取请求查询字符串 Node

javascript - 如何监听另一个对象的事件发射?

node.js - MongoDB - SSL 连接问题

javascript - puppeteer 在所选页面上执行 js 函数

javascript - node.js 链接多个 promise (使用 Mongoose )

javascript - Node.js/Express 静态资源连接被拒绝

javascript - NW.js + PDF.js : How to provide an URL to pdf. js?

javascript - 从 Node.Js 和 Express.Js 中的导入函数返回响应

javascript - 在 npm 脚本中匹配多个文件扩展名