我有一个jquery函数:
$.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
数组上获得唯一的[key,value]。
但是$.inArray([v.key, v.value], result)
总是返回-1,所以最后我总是拥有结果数组中的所有值。
出了什么问题?
答案 0 :(得分: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]);
}
});