jquery inArray数组

时间:2014-07-09 09:48:24

标签: jquery arrays

我有一个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,所以最后我总是拥有结果数组中的所有值。

出了什么问题?

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]);
        }
    });