从jQuery数组中过滤掉唯一的项目

时间:2013-05-10 21:41:01

标签: jquery

我试图从返回的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命令

的读数

enter image description here

如您所见,由于某种原因DRMrole在过滤结果中出现两次。每次运行此代码时都会发生这种情况,因此看起来并不是随机的。

3 个答案:

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