2014-03-04 34 views
0

我用JSON的工作就是像和在JavaScript如下排序:如何使一個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 

所以數據點布拉沃永遠不會被推到陣列。

任何人都可以指出我正確的方向來實現這一目標嗎?

回答

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); 
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]); 
    } 
}