我知道我可以使用循环来做到这一点,但我试图找到一种优雅的方式来做到这一点:
我有两个锯齿状数组(数组数组):
var array1 = [['a', 'b'], ['b', 'c']]; var array2 = [['b', 'c'], ['a', 'b']];
我想用来lodash确认上面的两个锯齿数组是一样的。我所说的“相同”是指其中没有任何项目array1不包含在array2. 请注意,锯齿状数组中的项目实际上是数组。所以我想比较内部数组。
lodash
array1
array2
在检查这些项目之间的相等性方面:
['a', 'b'] == ['b', 'a']
或者
['a', 'b'] == ['a', 'b']
两者都有效,因为字母总是有序的。
更新 :最初的问题是关于“数组”(而不是锯齿状数组),多年来,许多人讨论(并添加了答案)关于比较简单的一维数组(没有注意到问题中提供的示例实际上并不类似于他们期望的简单一维数组)。
如果对外部数组进行排序,则可以使用,_.isEqual()因为内部数组已经排序。
_.isEqual()
var array1 = [['a', 'b'], ['b', 'c']]; var array2 = [['b', 'c'], ['a', 'b']]; _.isEqual(array1.sort(), array2.sort()); //true
请注意,这.sort()将改变数组。如果这对您来说是个问题,请先使用(例如).slice()或展开运算符 ( ...) 进行复制。
.sort()
.slice()
...
或者,按照 Daniel Budick 在下面评论中的建议进行操作:
_.isEqual(_.sortBy(array1), _.sortBy(array2))
LodashsortBy()不会改变数组。
sortBy()