如何在不使用Javascript排序的情况下使JSON数组唯一

时间:2014-03-04 20:41:18

标签: javascript arrays json duplicates

我正在使用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

Array unique values

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永远不会被推送到阵列。

有人能指出我正确的方法来实现这个目标吗?

2 个答案:

答案 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);