我有一个像下面这样的数组,它是从另一个我不想修改的函数计算出来的。
var d = [[1, 2, 3], [2, 3], [1, 3]];
我想对上述数组中的所有数组使用 _.intersection
,如下所示:
var c = _.intersection(d);
// should return [3]
但是 _.intersection
将多个数组参数作为输入,而不是数组的数组。
我尝试使用类似于 Merge/flatten an array of arrays in JavaScript? 的方法来展平数组但它将整个数组转换为单个数组。
var merged = [].concat.apply([], d);
[1, 2, 3, 2, 3, 1, 3]; // I don't want this
让我详细解释一下。我有一个嵌套数组 d
(其中包含数组并且长度是动态的)。现在我想找到数组 d
中所有数组的交集。
我如何调用 _.intersection([1, 2, 3], [2, 3], [1, 3], ...)
但动态地使用 d
?
最佳答案
在 ES5 中你可以使用 Function#apply
将数组传播到参数中:
var d = [[1, 2, 3], [2, 3], [1, 3]];
var result = _.intersection.apply(_, d);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
您可以使用 lodash 的 _.spread
这将转换一个函数以使用参数数组:
var d = [[1, 2, 3], [2, 3], [1, 3]];
var result = _.spread(_.intersection)(d);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
在 ES6 中你可以使用 spread syntax做同样的事情:
const d = [[1, 2, 3], [2, 3], [1, 3]];
const result = _.intersection(...d);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
关于javascript - 如何获取嵌套数组中数组的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44395564/