【问题标题】:How do I remove JSON form JSON array with repeated key-value如何从具有重复键值的 JSON 数组中删除 JSON
【发布时间】:2017-12-07 19:04:01
【问题描述】:

我有一个 JSON 如下:

[{"name": "John", "id": 1},
 {"name": "Don", "id": 2},
 {"name": "Tom", "id": 3},
 {"name": "NewJohn", "id": 1},
 {"name": "Tim", "id": 4}]

我想首先确定键“id”是否具有相同的值。如果是,我想删除以前具有相同“id”的 JSON,以便在 JSON 数组中获得具有唯一“id”值的 JSON。

[{"name": "Don", "id": 2},
 {"name": "Tom", "id": 3},
 {"name": "NewJohn", "id": 1},
 {"name": "Tim", "id": 4}]

如何在 javascript 中实现这一点?

【问题讨论】:

标签: javascript arrays json arraylist


【解决方案1】:

您可以使用reduceRight 从末尾开始循环,如果没有具有相同 id 的元素,则添加到新数组中。

var data = [{"name": "John", "id": 1}, {"name": "Don", "id": 2}, {"name": "Tom", "id": 3}, {"name": "NewJohn", "id": 1}, {"name": "Tim", "id": 4}]
 
var result = [] 
data.reduceRight(function(r, e) {
  if(!r[e.id]) {
    result.unshift(e);
    r[e.id] = 1;
  }
  return r;
}, {})

console.log(result)

【讨论】:

  • 是的,这个问题比看起来更棘手,reduceRight 似乎可以解决问题......如果可能的话,你能删除逗号运算符吗? ;)
【解决方案2】:

使用以下代码。这将解决您的问题

    var obj = [{"name": "John", "id": 1}, {"name": "Don", "id": 2}, {"name": "Tom", "id": 3}, {"name": "NewJohn", "id": 1}, {"name": "Tim", "id": 4}];
        var seenNames = {};
    
    obj = obj.reverse().filter(function(currentObject) {
        if (currentObject.id in seenNames) {
            return false;
        } else {
            seenNames[currentObject.id] = true;
            return true;
        }
    });
    
    console.log(obj)

【讨论】:

  • 但这只会给出那些需要的对象。能不能说的具体点……
  • 只需将他们的输出与您的比较。
【解决方案3】:
var result=new Map(data.map(el=>[el.id,el]));

你可以用它创建一个 Map.. 它可以被解构为一个数组:

result=[...result].map(e=>e[1]);

http://jsbin.com/zuqabonebe/edit?console

【讨论】:

    【解决方案4】:

    使用两个 for 循环我删除了之前的 id 属性。

    var data=[{"name": "John", "id": 1},
     {"name": "Don", "id": 2},
     {"name": "Tom", "id": 3},
     {"name": "NewJohn", "id": 1},
     {"name": "Tim", "id": 4}];
    
    function deleteJsonProperty(dataJson){
    for(var i=0;i<dataJson.length;i++){  
      for(var z=i+1;z<dataJson.length;z++){
      if(dataJson[i].id===dataJson[z].id){
        delete dataJson[i].id;
      }
      }
    }
      return dataJson;
    }
    console.log(deleteJsonProperty(data));

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 2021-05-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多