如何使用重复的键值删除JSON格式的JSON数组

时间:2017-07-04 10:40:43

标签: javascript arrays json arraylist

我有一个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中实现此目的?

4 个答案:

答案 0 :(得分:2)

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

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)

答案 1 :(得分:1)

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

    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)

答案 2 :(得分:0)

var result=new Map(data.map(el=>[el.id,el]));

您可以创建一个Map ...可以将其解构为数组:

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

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

答案 3 :(得分:0)

使用两个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));