簡體   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