在javascript中判断两个数组对象的值是否相等时是不能直接通过==或===进行判断的,这时可以通过下面的方法来判断两个数组是否一致。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
// Warn if overriding existing method if(Array.prototype.equals) console.warn("Overriding existing Array.prototype.equals. Possible causes: New API defines the method, there's a framework conflict or you've got double inclusions in your code."); // attach the .equals method to Array's prototype to call it on any array Array.prototype.equals = function (array) { // if the other array is a falsy value, return if (!array) return false; // compare lengths - can save a lot of time if (this.length != array.length) return false; for (var i = 0, l=this.length; i < l; i++) { // Check if we have nested arrays if (this[i] instanceof Array && array[i] instanceof Array) { // recurse into the nested arrays if (!this[i].equals(array[i])) return false; } else if (this[i] != array[i]) { // Warning - two different object instances will never be equal: {x:20} != {x:20} return false; } } return true; } // Hide method from for-in loops Object.defineProperty(Array.prototype, "equals", {enumerable: false}); // 下边是测试代码,右以控制台中查看输出结果 let arr_a = [1, 2, [1, 2]]; let arr_b = [1, 2, [1, 2]]; let arr_c = [1, 2, [3, 4]]; if (arr_a.equals(arr_b)){ console.log('数组一样'); }else{ console.log('数组不一样'); } console.log(arr_a.equals(arr_b)); //true console.log(arr_a.equals(arr_c)); //false |
上面代码可检查一维数组和多维数组与参考数组是否一致;