Javascript 下划线.js-带交叉点的foldl

Javascript 下划线.js-带交叉点的foldl,javascript,underscore.js,fold,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,

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

我试着用两种我认为是等效的方法来做这件事,但它们产生了不同的输出

以下两者之间的区别是什么:

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

有没有更好的方法呢?

\u交叉点可以使用任意数量的数组

简单使用

_.intersection(arrayA, arrayB, arrayC, ...);
或者如果你有一个数组

_.intersection.apply(_, arrayOfArrays);

这里不需要折叠

下划线已经可以接受多个数组

所以uu.intersection.applynull,a

或交叉点[1,2,3,4,5],[4,5,6,7],[5,6,7,8]


将起作用。

我认为最好的方法是使用应用和交叉:


我不知道我预先准备了多少数组,所以我不能使用第一种形式,但第二种形式对我很有效。谢谢。我现在意识到,u.intersection.apply是一种更好的方法,但我仍然很好奇-我的两个使用foldl的实现之间有什么区别?我不确定第二个为什么不起作用。我尝试了var func=functo,b{return{.intersectiona,b}并调用了{.foldla,func,它可以工作。我认为问题可能在于0.intersection不知道取哪个参数,所以它使用了0.reducememo、value、index、list提供的所有四个参数,而这个列表使它无法工作。
var a = [[1,2,3,4,5], [3, 4,5,6,7], [4,5,6,7,8]];
_.intersection.apply(null, a);
// -> returns [ 4, 5 ]