我正在使用JSON,如下所示:Javascript:
{
"data": [
{
"id": 1,
"name": "Data Point Zeta",
"unit": "456456456",
},
{
"id": 1,
"name": "Data Point Alpha",
"unit": "345345",
},
{
"id": 1,
"name": "Data Point Maverick",
"unit": "453455",
},
{
"id": 1,
"name": "Data Point Delta",
"unit": 3534545"",
},
{
"id": 1,
"name": "Data Point Delta",
"unit": 3534545"",
},
{
"id": 1,
"name": "Data Point Bravo",
"unit": "534553455",
},
{
"id": 1,
"name": "Data Point Bravo",
"unit": "534553455",
},
{
"id": 1,
"name": "Data Point Bravo",
"unit": "4356346436",
}
]
}
我希望能够通过名称值使这个JSON唯一,所以例如我希望能够解析并更改JSON,所以它变成这样:
{
"data": [
{
"id": 1,
"name": "Data Point Zeta",
"unit": "456456456",
},
{
"id": 1,
"name": "Data Point Alpha",
"unit": "345345",
},
{
"id": 1,
"name": "Data Point Maverick",
"unit": "453455",
},
{
"id": 1,
"name": "Data Point Delta",
"unit": 3534545"",
},
{
"id": 1,
"name": "Data Point Bravo",
"unit": "453455",
},
]
}
所以我正在根据其名称检索对象的第一个唯一实例。我需要使用基本的Javascript,我不能使用JQuery或任何其他库。而且我不想对数组进行排序。
我已经尝试过以下问题的代码,但没有运气:
How to make a JSON array unique
Get unique results from JSON array using jQuery
我最接近的是使用以下代码:
var results = [];
for (var i = 0; i < myJSONArr.length; i++) {
if (myJSONArr[i + 1].name != myJSONArr[i].name) {
results.push(myJSONArr[i]);
}
}
但这总是给我一个未定义的错误,如果我输入代码来检查未定义的错误,它会从列表中留下一个。例如,它获得以下名称:
Data Point Zeta
Data Point Alpha
Data Point Maverick
Data Point Delta
因此Data Point Bravo永远不会被推送到阵列。
有人能指出我正确的方法来实现这个目标吗?
答案 0 :(得分:1)
如果您的数据总是按照这样的名称排序,您可以使用for循环添加一个:在最后一个元素上,if语句将抛出未定义的错误,因为没有下一个元素(myJSONArr[i + 1]
) 。尝试这样的事情:
var results = [];
for (var i = 0; i < myJSONArr.length; i++) {
if (i === myJSONArr.length - 1 || myJSONArr[i + 1].name != myJSONArr[i].name) {
results.push(myJSONArr[i]);
}
}
答案 1 :(得分:1)
简单检查哈希?
var data = [
{
"id": 1,
"name": "Data Point Zeta",
"unit": "456456456"
},
{
"id": 1,
"name": "Data Point Alpha",
"unit": "345345"
},
{
"id": 1,
"name": "Data Point Maverick",
"unit": "453455"
},
{
"id": 1,
"name": "Data Point Delta",
"unit": "3534545"
},
{
"id": 1,
"name": "Data Point Bravo",
"unit": "534553455"
},
{
"id": 1,
"name": "Data Point Bravo",
"unit": "4356346436"
}
];
var results = []; var checks = [];
for (var i = 0; i < data.length; i++) {
if (!checks[data[i].name]) {
results.push(data[i]);
}
checks[data[i].name] = true;
}
console.log(results);