陣列刪除重複我有一個JSON數組這樣從含有陣列
[{"Email":"[email protected]","Name":"ACO","Groups":["MOD_SW","MOD_PI","MOD_GE"],"Id":63,"Url":"aco"},
{"Email":"[email protected]","Name":"Agpo","Groups":["MOD_PI"],"Id":22,"Url":"agpo"},
{"Email":"[email protected]","Name":"Akatherm","Groups":["MOD_SW"],"Id":64,"Url":"akatherm"},
{"Email":"[email protected]","Name":"Albrand","Groups":["MOD_PI,"MOD_GE"],"Id":23,"Url":"albrand"}]
我想創建一個新的數組(選擇標記)具有鮮明Groups
。
這個Groups
是一個數組。
我想要的選擇框有以下值:
MOD_SW
MOD_PI
MOD_GE
我的JS:
UpdateSelectMenu: function (selectId, data) {
$(selectId).empty();
$(selectId).html("<option value='all' selected='selected'>All groups</option>");
var array_unique_values = [];
for (var i = 0; i < data.Groups.length; i++) {
for (var j = i+1; j < data.Groups.length; j++) {
if (data.Groups[i] === data.Groups[j]) {
j = ++i;
}
}
array_unique_values.push(data.Groups[i]);
}
array_unique_values = array_unique_values.sort();
$.each(array_unique_values, function (k, v) {
$(selectId).append("<option value='" + v + "'>" + v + "</option>");
});
}
我也試過
for (var i = 0; i < data.length; i++) { //browse whole data
for (var j = 0; j < data[i].Groups.length; j++) { //browse Groups array
for (var k = j + 1; j < data[i].Groups.length; k++) {
if (data[i].Groups[j] === data[i].Groups[k]) {
continue;
}
}
array_unique_values.push(data[i].Groups[j]);
}
}
但由於出現錯誤:Groups.length
爲空或不是物體
此代碼附加到select
標記組值,但它顯示爲重複項,因爲Groups
是一個數組。
我必須創建一個新的for
語句來瀏覽Groups
數組?
或者還有另外一種方法避免嵌套for
陳述?
謝謝
$ .inArray正在做一個循環(如果indexOf不可用),我認爲效率很低。 – 2012-01-09 10:10:00
所有尊重你Darin :)你救了我的命。這些'$ .each'沒有通過我的大腦。 – 2012-01-09 10:11:41
@mgechev,好點。我用更高效的替代方案更新了我的答案。 – 2012-01-09 10:20:33