我有一个任意长度的数组数组。我想计算交点。
我尝试用两种我认为相同的方式做到这一点,但它们产生了不同的输出。
有什么区别:
var a = [[1,2,3,4,5], [3, 4,5,6,7], [4,5,6,7,8]]
_.foldl(a, function(a, b) { return _.intersection(a, b) } )
// Works as expected -> [4, 5]
而且:
var a = [[1,2,3,4,5], [4,5,6,7], [5,6,7,8]]
_.foldl(a, _.intersection )
// Does not work -> []
还有更好的方法吗?
答案 0 :(得分:3)
这里你不需要折叠。
下划线的intersection已经可以使用多个阵列。
所以_.intersection.apply(null, a)
或_.intersection([1, 2, 3, 4, 5], [4, 5, 6, 7], [5, 6, 7, 8])
会奏效。
答案 1 :(得分:2)
_.intersection
可以使用任意数量的数组。
只需使用
_.intersection(arrayA, arrayB, arrayC, ...);
或者如果你有一个数组数组
_.intersection.apply(_, arrayOfArrays);
答案 2 :(得分:2)
我认为最好的方法是使用apply
和intersection
:
var a = [[1,2,3,4,5], [3, 4,5,6,7], [4,5,6,7,8]];
_.intersection.apply(null, a);
// -> returns [ 4, 5 ]