原始主题,我知道,但是任何人都可以评论以下用于比较两个 ES5 数组的算法:
function equal_arrays(a, b) {
"use strict";
var c = 0;
return a.every(function (e) {
return e === b[c++];
});
}
我认为这是非常干净和明显的使用 [].every() 来快速比较两个数组?我有那种唠叨“肯定不会那么简单吧?” 感觉如何?
注意:当两个数组在同一位置包含严格相等的所有元素时,它们是相等的。所以元素索引和元素值都必须完全相等。不同类型的值被认为是不相等的。还比较了稀疏数组。
测试用例:
equal_arrays([],[]) ; // => true
equal_arrays([1,2],[1,2]) ; // => true
equal_arrays([1,,2],[1,,2]) ; // => true
equal_arrays([,],[,]); // => true
equal_arrays([1,,3,,,],[1,,3,,,]); // => true
使用案例产生 => false,可以想象自己。比较非数组是语法错误。
非常感谢善意和乐于助人的贡献者。似乎“最好的”(从来没有这样的事情)实现是这样的:
function has(element, index)
{
return this[index] === element;
}
function equal_arrays(a, b)
{
return (a.length === b.length) && a.every(has, b) && b.every(has, a);
}
@tom 的双向 every() 实现是必要的,这样的测试用例可以工作:
equal_arrays([1,,3],[1,2,3]); //=> false
再次感谢...