我试图从返回的Ajax调用结果中提取所有唯一的Field
名称。但是,无论出于何种原因,Field
名称DRMrole
仍会出现两次。
这是我正在使用的jQuery
//Construct array to determine unique Field names
var fieldArray = [];
$.each(data, function(i, item){
fieldArray.push(item.Field);
console.log(item.Field);
});
fieldArray = $.unique(fieldArray);
console.log(fieldArray);
以下是console.log
命令
如您所见,由于某种原因DRMrole
在过滤结果中出现两次。每次运行此代码时都会发生这种情况,因此看起来并不是随机的。
答案 0 :(得分:14)
您始终可以使用对象而不是数组 - 将每个项目作为属性放在对象中。您尝试插入的每个相同密钥都将简单地覆盖现有密钥:
var fieldArray = {}; // object instead of array
$.each(data, function(i, item){
fieldArray[item.Field] = item.Field;
});
这是超级简单 example on jsFiddle
另一个选项(如a comment sbeliv01中所述)将使用$.inArray()
函数来测试元素是否已存在:
var fieldArray = [];
$.each(data, function(i, item){
if ($.inArray(item.Field,fieldArray) === -1){
fieldArray.push(item.Field);
}
});
参考 - $.inArray()
答案 1 :(得分:1)
如果你已经拥有一个你想要“独特化”的数组,那么另一个选择
Array.prototype.getUnique = function(){
var u = {}, a = [];
for(var i = 0, l = this.length; i < l; ++i){
if(u.hasOwnProperty(this[i])) {
continue;
}
a.push(this[i]);
u[this[i]] = 1;
}
return a;
}
答案 2 :(得分:-3)
var x = [2,3,6,3,2,5];
x = x.filter(function(a,b,c){return c.indexOf(a, - c.length)&gt; = b?true:false;});