阵列删除重复我有一个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