使用lodash比较数组(项目存在没有秩序)

我知道我可以使用循环,但我试图find一个这样做的优雅方式:

我有两个数组:

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

我想用lodash来证实两者是一样的。 “相同”我的意思是没有在array1中不包含在array2中的项目。

在检查这些项目之间的平等方面:

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

要么

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

既然工作,因为信件将永远是有序的。

提前致谢。

如果对外部数组sorting,则可以使用_.isEqual()因为内部数组已经sorting。

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

请注意.sort()会改变数组。 如果这对您是个问题,请先使用(例如) .slice()或spread运算符( ... )进行复制。

“相同”我的意思是有没有在array1中不包含在array2中的项目。

你可以使用flatten()和difference()来实现,如果你不关心array2有不在 array1 。 这听起来像你问的是array1 array2的子集

 var array1 = [['a', 'b'], ['b', 'c']]; var array2 = [['b', 'c'], ['a', 'b']]; function isSubset(source, target) { return !_.difference(_.flatten(source), _.flatten(target)).length; } isSubset(array1, array2); // → true array1.push('d'); isSubset(array1, array2); // → false isSubset(array2, array1); // → true 

我们可以使用_.difference函数来查看是否有任何区别。

 function isSame(arrayOne, arrayTwo) { var a = arrayOne, b = arrayTwo; if (arrayOne.length <= arrayTwo.length) { a = arrayTwo; b = arrayOne; } return _.isEmpty(_.difference(a.sort(), b.sort())); } // examples console.log(isSame([1, 2, 3], [1, 2, 3])); // true console.log(isSame([1, 2, 4], [1, 2, 3])); // false console.log(isSame([1, 2], [2, 3, 1])); // false console.log(isSame([2, 3, 1], [1, 2])); // false 

我希望这能帮到您。