使用原生js判断两个数组元素是否完全相等/部分相等/完全不相等

1.假设数组中都是简单类型。
2.最好是能给出性能较高/代码简洁的解法(分两个解法写也行)。
3.如果简洁的写法使用第三方库能缩短到更短的话,使用第三方库也是可以的。

[1,3,2] [1,2,3] 完全相等
[1,2,3] [5,3] 部分相等
[1,2,3] [4,5,6] 完全不相等

只需要判定成功其中两种情况即可 剩下的就是另一种情况了。

阅读 4.8k
4 个回答

完全相等

JSON.stringify(arr1.sort()) == JSON.stringify(arr2.sort())

部分相等

arr1.some(v=>arr2.includes(v)) == true

完全不相等

arr1.some(v=>arr2.includes(v)) == false

es6,利用Set 计算集合的差集。https://es6.ruanyifeng.com/#d...

let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// (a 相对于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));

difference.size === 0 // 完成相同
difference.size >0 && < a.length // 部分相同
difference.size === a.length // 完成不同

提供一种解法,有啥可优化的可以评论提哦。

test = (arr1, arr2) => {
    const x = new Set(arr1)
    const y = new Set(arr2)
    const l = new Set([...x, ...y]).size;
    if (x.size === y.size && x.size === l) return '全等';
    if (x.size + y.size === l) return '无交集';
    return '不全等但有交集';
};

可以参考:R.equals([1, 2, 3], [1, 2, 3]); //=> true
https://ramdajs.com/docs/#equals
一般来说,能尽量用库就用,库封装好的,会考虑到一些错误边界情况。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题