与滤波器的关联数组差异

时间:2014-03-05 14:13:12

标签: javascript

我希望在两个数组中获得差异,我编写了这段代码。 但它不适用于关联数组。

function array_diff(older, newer){
    function callback_filter(element, index, array){
        return (this.indexOf(element) === -1);
    }

    return newer.filter(callback_filter, older);
}

结果

array_diff([{a: "A"}, {b: "B"}], [{a: "A"}, {b: "B"}, {c: "C"}]);
>> [{a: "A"}, {b: "B"}, {c: "C"}]

请告知。

1 个答案:

答案 0 :(得分:1)

问题是根据indexOf,您的对象不相等。

例如:

var a1 = {a: "A"};
var a2 = {a: "A"};

a1 == a2; // THIS IS FALSE

因此,您需要实现自己的相等测试。这是否必须适用于任何可能的JS对象?

您可以将对象转换为字符串并进行比较,但这并不能提供良好的性能:

JSON.stringify(a1) === JSON.stringify(a2) // THIS IS TRUE

您可能会发现this question有帮助。