7 回答
TA贡献1873条经验 获得超9个赞
一句就能搞定:
const listA = [1, 2, 3]
const listB = [2, 3, 1]
const result = listA.length === listB.length && listA.every(a => listB.some(b => a === b)) && listB.every(_b => listA.some(_a => _a === _b));
console.log(result);
//true
TA贡献1844条经验 获得超8个赞
const listA = [1, 2, 3]
const listB = [3, 2, 1]
Array.prototype.equals = function(arr)
{
return this.sort().join() === arr.sort().join()
}
console.log(listA.equals(listB))
TA贡献1963条经验 获得超6个赞
方法1:先两个数组用同样的方式排序,再字符串化比较
方法2:把两个数组分别放到Set里面去,再把其中一个Set add到另外一个Set,如果长度没变两数组元素相同
TA贡献1786条经验 获得超11个赞
你可以首先排序,然后遍历一遍,这样时间复杂度主要就是排序的时间复杂度了;
但是我觉得这段代码还有可以优化的地方:
function isSame (a, b) {
if (a.length !== b.length) return false
let c = b.slice()
// 在可以提前退出的情况下不要使用forEach
for (let i = 0, len = a.length; i < len; i++) {
let j = c.indexOf(a[i])
if ( j === -1) return false
c.splice(j, 1) // 删除已经匹配的元素,可以缩短下次匹配的时间
}
return true
}
isSame([1, 2, 2], [1, 1, 2]) // false
isSame([1, 2, 2], [2, 1, 2]) // true
TA贡献1864条经验 获得超6个赞
如果数组元素是纯字符的话,可以试试以下:
function isEqual(arr1, arr2) {
return JSON.stringify(arr1.sort()) === JSON.stringify((arr2.sort()))
}
// true
isEqual([1, 5, 'string', 2], [1, 2, 5, 'string'])
添加回答
举报