-
眼眸繁星
一句就能搞定: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
-
婷婷同学_
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))
-
神不在的星期二
方法1:先两个数组用同样的方式排序,再字符串化比较方法2:把两个数组分别放到Set里面去,再把其中一个Set add到另外一个Set,如果长度没变两数组元素相同
-
Qyouu
你可以首先排序,然后遍历一遍,这样时间复杂度主要就是排序的时间复杂度了;但是我觉得这段代码还有可以优化的地方: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]) // falseisSame([1, 2, 2], [2, 1, 2]) // true
-
狐的传说
你这个写法我也没看懂, 测试了一下[1,2,3]和[1,2,3]返回false,[1,2,3]和[2,3,4]也返回false
-
慕尼黑的夜晚无繁华
如果数组元素是纯字符的话,可以试试以下:function isEqual(arr1, arr2) { return JSON.stringify(arr1.sort()) === JSON.stringify((arr2.sort()))}// trueisEqual([1, 5, 'string', 2], [1, 2, 5, 'string'])