繁体   English   中英

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

[英]How to get intersection of the arrays in a nested array

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

var d = [[1, 2, 3], [2, 3], [1, 3]];

我想对上面的数组中的所有数组使用_.intersection ,如下所示:

var c = _.intersection(d);
// should return [3]

但是_.intersection将多个数组参数作为输入,而不是数组数组。

我试图使用类似于在JavaScript中合并/展平数组的数组展平数组? 但是它将整个数组转换为单个数组。

var merged = [].concat.apply([], d);    
[1, 2, 3, 2, 3, 1, 3]; // I don't want this 

让我详细解释一下。 我有一个嵌套数组d (它包含数组,并且长度是动态的)。 现在,我想找到数组d内所有数组的交集。

如何使用d动态调用_.intersection([1, 2, 3], [2, 3], [1, 3], ...)

在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中,您可以使用传播语法执行相同的操作:

 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> 

您想要的结果不是js支持的数据结构。 但是,您可以将数组分解为变量:

 let [a,b,c] = [[1, 2, 3], [2, 3], [1, 3]]; console.log(a,b,c); 

您要获取的唯一有效表示是字符串。 您可以像这样获得您所要求的确切结果:-):

 let d = [ [1, 2, 3], [2, 3], [1, 3] ]; function createString(arr) { let s = arr.map(el => `[${el}]`).join(", "); return `result ${s};`; } console.log(createString(d)); 

唯一的方法是将每个内部数组放入单独的变量中。 使用ES6,就像:

let d = [[1, 2, 3], [2, 3], [1, 3]];
let [arr1, arr2, arr3] = d;
// -> arr1: [1, 2, 3], arr2: [2, 3], arr3: [1, 3]

否则,您当然可以使用标准ES5语法来实现。

您可以使用具有相同变量的所有这些内部数组的唯一方法是使用已有的父数组d

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM