【问题标题】:Removing duplicates from JSON array by a value in each JSON object in array通过数组中每个 JSON 对象中的值从 JSON 数组中删除重复项
【发布时间】:2015-11-04 21:45:00
【问题描述】:

如果数组中有两个 JSON 对象对于特定字段具有相同的值,那么我想将它们标记为重复。我想删除其中之一。同样,当有多个重复时,我只想保留最后一个对象(最新)。如果这是输入:

names_array = [
    {name: "a",  age: 15},
    {name: "a",  age: 16},
    {name: "a",  age: 17},
    {name: "b",  age: 18}
    {name: "b",  age: 19}];

我希望输出是

names_array_new = 
    {name: "a",  age: 17},
    {name: "b",  age: 19}];

我已经搜索过这个,但只找到了如何在整个对象相同时删除重复项。

【问题讨论】:

标签: javascript arrays json node.js


【解决方案1】:

应该这样做:

names_array = [
    {name: "a",  age: 15},
    {name: "a",  age: 16},
    {name: "a",  age: 17},
    {name: "b",  age: 18},
    {name: "b",  age: 19}];

function hash(o){
    return o.name;
}    

var hashesFound = {};

names_array.forEach(function(o){
    hashesFound[hash(o)] = o;
})

var results = Object.keys(hashesFound).map(function(k){
    return hashesFound[k];
})

hash 函数决定哪些对象是重复的,hashesFound 对象将每个哈希值与产生该哈希的最新对象一起存储,results 数组包含匹配的对象。

【讨论】:

    【解决方案2】:

    稍微不同的方法:

    var names_array = [
        { name: "a", age: 15 },
        { name: "a", age: 16 },
        { name: "a", age: 17 },
        { name: "b", age: 18 },
        { name: "b", age: 19 }
    ];
    
    var names_array_new = names_array.reduceRight(function (r, a) {
        r.some(function (b) { return a.name === b.name; }) || r.push(a);
        return r;
    }, []);
    
    document.getElementById('out').innerHTML = JSON.stringify(names_array_new, 0, 4);
    <pre id="out"></pre>

    【讨论】:

      【解决方案3】:
      var names_array = [
      {name: "a", age: 15},
      {name: "a", age: 16},
      {name: "a", age: 17},
      {name: "b", age: 18},
      {name: "b", age: 19}];
      
      function removeDuplicate(arr, prop) {
      var new_arr = [];
      var lookup = {};
      for (var i in arr) {
          lookup[arr[i][prop]] = arr[i];
      }
      for (i in lookup) {
          new_arr.push(lookup[i]);
      }
      return new_arr;}
      var newArray = removeDuplicate(names_array, 'name');
      console.log("Result "+newArray);
      

      【讨论】:

        【解决方案4】:

        Array.from(new Set(brand.map(obj => JSON.stringify(obj)))).map(item => JSON.parse(item))

        【讨论】:

        • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-19
        • 2016-01-05
        • 1970-01-01
        • 2021-05-12
        • 1970-01-01
        • 2016-11-24
        • 2019-03-11
        相关资源
        最近更新 更多