javascript - 使用lodash比较锯齿状数组(项目无序存在)

标签 javascript arrays lodash jagged-arrays

我知道我可以使用循环来做到这一点,但我正试图找到一种优雅的方式来做到这一点:

我有两个锯齿状的数组(数组的数组):

var array1 = [['a', 'b'], ['b', 'c']];
var array2 = [['b', 'c'], ['a', 'b']];

我想用lodash来确认上面两个锯齿状数组是一样的。 “相同”是指 array1 中没有不包含在 array2 中的项目。请注意,交错数组中的项目实际上是数组。所以我想比较内部数组。

就检查这些项目之间的相等性而言:

['a', 'b'] == ['b', 'a'] 

['a', 'b'] == ['a', 'b'] 

两者都有效,因为字母总是按顺序排列的。


更新:最初的问题是谈论“数组”(而不是锯齿状数组),多年来许多人讨论(并添加了答案)关于比较简单的一维数组(没有注意到问题中提供的示例实际上与他们期望的简单一维数组并不相似。

最佳答案

如果对外部数组进行排序,可以使用_.isEqual()因为内部数组已经排序。

var array1 = [['a', 'b'], ['b', 'c']];
var array2 = [['b', 'c'], ['a', 'b']];
_.isEqual(array1.sort(), array2.sort()); //true

请注意 .sort() 会改变数组。如果这对您来说是个问题,请先使用(例如).slice() 或扩展运算符 (...) 制作副本。

或者,按照 Daniel Budick 在下面评论中的建议进行操作:

_.isEqual(_.sortBy(array1), _.sortBy(array2))

Lodash 的 sortBy() 不会改变数组。

关于javascript - 使用lodash比较锯齿状数组(项目无序存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29951293/

相关文章:

javascript - 单击按钮后显示新字段

javascript - "this"HTML 属性的事件处理程序内部

javascript - Google map JavaScript 收费但隐藏在 CodeIgniter 上

C 枚举数组(需要帮助理解)

mysql - Postgresql 函数 If 条件 then 运行查询 else stop

javascript - 我可以使用 _lodash 在 AngularJS 中去抖动或限制监视的 <input> 吗?

javascript - JS-洛达什;嵌套对象(父/子)到平面数组

javascript - bootstrap datetimepicker 最大日期

java - 为什么这会给我这个 arrayoutofbounds 错误?

javascript - 错误类型错误 : Cannot read property 'db' of undefined