如何在JavaScript中比较数组?

如何在JavaScript中比较数组?

我想比较两个阵列......理想情况下,有效率。没有什么花哨的,只要true它们是相同的,false如果不相同的话。毫不奇怪,比较运算符似乎不起作用。


var a1 = [1,2,3];

var a2 = [1,2,3];

console.log(a1==a2);    // Returns false

console.log(JSON.stringify(a1)==JSON.stringify(a2));    // Returns true

每个数组的JSON编码都有,但有没有更快或更“简单”的方法来简单地比较数组而不必迭代每个值?


临摹微笑
浏览 822回答 4
4回答

慕斯709654

虽然这只适用于标量数组(见下面的注释),但它很简短: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

慕慕森

我喜欢将Underscore库用于数组/对象重编码项目......在Underscore和Lodash中,无论您是比较数组还是对象,它只是如下所示:_.isEqual(array1, array2)   // returns a boolean_.isEqual(object1, object2) // returns a booleanUnderscore是平等的文档Lodash是平等的文档

jeck猫

我认为这是使用JSON stringify执行此操作的最简单方法,在某些情况下它可能是最佳解决方案:JSON.stringify(a1) === JSON.stringify(a2);这将对象转换a1和a2使他们能够比较成字符串。在大多数情况下,顺序很重要,因为它可以使用上述答案之一中显示的排序算法对对象进行排序。请注意,您不再比较对象,而是比较对象的字符串表示形式。它可能不是你想要的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript