如何对比两个数组是否相等?
const a = [1, 2, 3]
const b = [1, 2, 3]
a === b // false
直接对比是不行的,因为在JavaScript中,数组和对象是按引用而不是按值进行比较的。
JSON.stringify 转为字符串后在进行对比
const equals = (a,b) => JSON.stringify(a) === JSON.stringify(b)
const a = [1,2,3]
const b = [1,2,3]
equals(a, b) // true
但是某种情况下会有问题
// 接上个代码段
const str = 'a'
const strObj = new String('a')
str === strObj // false
equals([str], [strObj]) // true,但应该是false
null === undefined // false
equals([null] , [undefined]) // true 但应该是false
更好的方式 用Array.prototype.every()
const equals = (a, b) =>
a.length === b.length &&
a.every((v,i) => v === b[i])
const a = [1,2,3]
const b = [1,2,3]
const str = 'a'
const strObj = new String('a')
equals(a,b) // true
equals([str], [strObj]) // false
equals([null], [undefined]) // false
如何数组是乱序如何处理 用Array.prototype.filter()
cosnt equalsIgnoreOrder = (a,b) =>{
if(a.length !== b.length) return false
const uniqueValues = new Set([...a, ...b])
for ( const v of uniqueValues){
const aCount = a.filter(e=>e === v).length
const bCount = b,filter(e->e === v).length
if(aCount != bCount) return false
}
return true
}
https://www.30secondsofcode.org/blog/s/javascript-array-comparison