2014-07-09 127 views
0

我有一个jQuery函数:jQuery的inArray在阵列

$.extend({ 
    distinct : function(anArray) { 
     var result = []; 
     $.each(anArray, function(i,v){ 
      if ($.inArray([v.key, v.value], result) == -1) result.push([v.key, v.value]); 
     }); 
     return result; 
    } 
}); 

我想获得独特的[键,值]在anArray阵列上。

$.inArray([v.key, v.value], result)总是返回-1,所以在最后我总是在结果阵列中的所有值。

怎么了?

+1

什么是例如输入和期望是什么输出? – Exception

+0

所以anArray是一个对象数组? – Steve

+0

是anArray是具有某些值的对象,如键和值。 – user3469203

回答

1

问题是对象比较。看到这个问题的更多细节:How to determine equality for two JavaScript objects?

在JavaScript中,数组比较平等比较它们的引用,而不是它们的内容(与使用对象);因此:

[1] == [1]; // false 

你需要做一个自定义比较两个键和值,而不是使用$.inArray

$.each(anArray, function(i,v){ 
     var present = false; 
     for(var j in result) { 
      if (v.key === result[j][0] && v.value === result[j][1]) { 
       present = true; 
       break; 
      } 
     } 
     if(!present) { 
      result.push([v.key, v.value]); 
     } 
    }); 
+0

非常感谢解释! – user3469203