我有一个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中实现此目的?
答案 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]);
答案 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));