为了账号安全,请及时绑定邮箱和手机立即绑定

如何在JavaScript中比较数组?

如何在JavaScript中比较数组?

临摹微笑 2019-05-22 14:38:41
如何在JavaScript中比较数组?我想比较两个阵列......理想情况下,有效率。没有什么花哨的,只要true它们是相同的,false如果不相同的话。毫不奇怪,比较运算符似乎不起作用。var a1 = [1,2,3];var a2 = [1,2,3];console.log(a1==a2);    // Returns falseconsole.log(JSON.stringify(a1)==JSON.stringify(a2));    // Returns true每个数组的JSON编码都有,但有没有更快或更“简单”的方法来简单地比较数组而不必迭代每个值?
查看完整描述

4 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

虽然这只适用于标量数组(见下面的注释),但它很简短:


array1.length === array2.length && array1.every(function(value, index) { return value === array2[index]})

Rr,在带有箭头功能的ECMAScript 6 / CoffeeScript / TypeScript中:


array1.length === array2.length && array1.every((value, index) => value === array2[index])

(注意:'标量'在这里表示可以直接使用的值===。因此:数字,字符串,引用对象,引用函数。有关比较运算符的更多信息,请参阅MDN参考)。


UPDATE


根据我从评论中读到的内容,对数组进行排序和比较可能会给出准确的结果:


array1.length === array2.length && array1.sort().every(function(value, index) { return value === array2.sort()[index]});

例如:


array1 = [2,3,1,4];

array2 = [1,2,3,4];

然后上面的代码将给出 true


查看完整回答
反对 回复 2019-05-22
?
慕慕森

TA贡献1856条经验 获得超17个赞

我喜欢将Underscore库用于数组/对象重编码项目......在Underscore和Lodash中,无论您是比较数组还是对象,它只是如下所示:


_.isEqual(array1, array2)   // returns a boolean

_.isEqual(object1, object2) // returns a boolean


查看完整回答
反对 回复 2019-05-22
?
jeck猫

TA贡献1909条经验 获得超7个赞

我认为这是使用JSON stringify执行此操作的最简单方法,在某些情况下它可能是最佳解决方案:

JSON.stringify(a1) === JSON.stringify(a2);

这将对象转换a1a2使他们能够比较成字符串。在大多数情况下,顺序很重要,因为它可以使用上述答案之一中显示的排序算法对对象进行排序。

请注意,您不再比较对象,而是比较对象的字符串表示形式。它可能不是你想要的。


查看完整回答
反对 回复 2019-05-22
  • 4 回答
  • 0 关注
  • 821 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信