簡體   English   中英

您可以將索引號數組傳遞給數組推送方法,而不是專門在推送中指定每個索引

[英]Can you pass an array of index numbers to the array push method instead of specifying each index in push specifically

我想從另一個2D數組創建一個新的2D數組,保留原始數組中在變量中定義的特定列。

我有一個工作版本,它使用硬編碼值來保留原始數組中的哪些列,但我需要一個使用變量的版本。

var data = [
             [1,5,7,8,9,98,56],
             [4,7,8,9,2,55,88],
             [3,3,4,3,3,24,11]
            ];

 var indexes2Keep = [0,2,6]; 

 data.forEach(function(row) {
    slicedData.push( [ row[2], row[4], row[6] ] );
 });

不是在數組推送方法中對列進行硬編碼,而是如何使用變量indices2Keep的值來提供相同的結果。

謝謝

預期產出是:

slicedData = [
         [1,7,56],
         [4,8,88],
         [3,4,11]
        ];

您可以使用Array.map / Array.filter

 var data = [ [1,5,7,8,9,98,56], [4,7,8,9,2,55,88], [3,3,4,3,3,24,11] ]; var indexes2Keep = [0,2,6]; var slicedData = data.map(function (row){ return row.filter(function(_,i){ return indexes2Keep.indexOf(i) !== -1 }) }) //Alternatively var slicedData2 = data.map(function (row){ return indexes2Keep.map(function(i){ return row[i] }) }) console.log(slicedData) console.log(slicedData2) 

只需在該數組上調用.map ,即可將每個索引映射到該行中該索引處的元素。

data.forEach(function(row) {
    slicedData.push(indexes2Keep.map(function(index) {return row[index]}));
});

您可以使用map()函數:

slicedData.push(indexes2Keep.map(index => row[index]));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM