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 ]