今天对数组进行操作时,发现不能用==操作符比较两个数组是否相等。
以前我都是遍历数组进行比较,今天写着写着,惯性使然,用了 等等操作符。
发现无论怎么操作,两个数组比较结果都是false。
不能直接使用 ==原因
对于对象来说,== 比较的是两个对象是否为同一个对象。
数组属于对象类型,尽管数组元素是相同的,但这两个数组属于不同的对象,
所以 == 比较为false。
如果要比较数组,最准确的还是遍历数组(特别是嵌套数组)
let arr1 = [1,2,3,4,], arr2 = [2,3,4,5];
for (let i = 0; i <= arr1.length; i++) {
if (arr1[i] !== arr2[i]) {
return false;
}
}
1、every() 方法
every() 方法使用指定函数检测数组中的所有元素:
1、如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
2、如果所有元素都满足条件,则返回 true。
3、注意: every() 不会对空数组进行检测。every() 不会改变原数组。
isEqual(arr1, arr2) {
return arr1.length === arr2.length && arr1.every((item, i) => {
return item === arr2[i]
})
}
2、转换成字符串进行比较(需要注意)
arr1.toString() == arr2.toString()
或
JSON.stringify(arr1) === JSON.stringify(arr2);
转换为字符串后再比较的性能是比较差的,适用于数组不长的数组。
当两个数组的元素顺序相同且元素都可以转换成字符串的情况下确实可行,但是这样的代码存有隐患,比如数字被转换成字符串,数字“1”和字符串“1”会被认为相等,可能造成调试困难,需要谨慎使用