Underscore.js - 带交叉点的foldl

时间:2013-10-30 15:24:24

标签: javascript underscore.js fold

我有一个任意长度的数组数组。我想计算交点。

我尝试用两种我认为相同的方式做到这一点,但它们产生了不同的输出。

有什么区别:

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 -> []

还有更好的方法吗?

3 个答案:

答案 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)

我认为最好的方法是使用applyintersection

var a = [[1,2,3,4,5], [3, 4,5,6,7], [4,5,6,7,8]];
_.intersection.apply(null, a);
// -> returns [ 4, 5 ]