2014-07-09 82 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