javascript - 如何获取嵌套数组中数组的交集

标签 javascript arrays underscore.js

我有一个像下面这样的数组,它是从另一个我不想修改的函数计算出来的。

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/

相关文章:

java - 将映射与 char 数组作为值进行比较 - Java

javascript - IE 11 平滑滚动不触发中间滚动事件

javascript - Typescript - 将所有源文件与 node_modules 中所需的外部模块捆绑在单个输出中

javascript - 默认 highstock 缩放,不带范围选择器按钮

javascript - 是否可以将流同步转换为缓冲区?

c++ - 数组赋值访问冲突

javascript - 如何在javascript中找到两个不不同数组的差异?我使用了下划线,但我对普通 JS 持开放态度

javascript - 如何使用 underscore.js 或 jquery 删除模式

templates - 在 Underscore.js 模板中使用 <% 而不解析它

javascript 查找闰年