0

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

我尝试以两种我认为等效的方式来执行此操作,但它们产生了不同的输出。

有什么区别:

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

?

有没有更好的方法呢?

4

3 回答 3

3

这里不需要弃牌。

下划线的交集已经可以带多个数组了。

所以_.intersection.apply(null, a)

或者_.intersection([1, 2, 3, 4, 5], [4, 5, 6, 7], [5, 6, 7, 8])

将工作。

于 2013-10-30T15:28:23.220 回答
2

_.intersection接受任意数量的数组。

只需使用

_.intersection(arrayA, arrayB, arrayC, ...);

或者,如果您有一个数组数组

_.intersection.apply(_, arrayOfArrays);
于 2013-10-30T15:27:30.953 回答
2

我认为最好的方法是使用applyand 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 ]
于 2013-10-30T15:35:50.643 回答