我希望在两个数组中获得差异,我编写了这段代码。 但它不适用于关联数组。
码
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"}]
请告知。
答案 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有帮助。