使用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
我希望这能帮到您。