簡體   English   中英

將一維數組重組為可變長度的二維數組

[英]Restructure one dimensional array into variable length two dimension array

我正在嘗試將一維數組轉換為二維數組,其中行的長度根據作為參數提供的最大列數而不同。 我基本上想包括每個第n個索引,直到到達數組末尾或完成了最大列數為止,無論之前發生了什么。 因此,對於以下輸入:

arr = [1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20]

列= 7

我想要以下輸出:

[1、4、7、10、13、16、19]

[2、5、8、11、14、17、20]

[3,6,9,9,12,15,18]

我嘗試了以下代碼,但僅適用於少數幾個值:

 var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]; function getOutput(arr, columns) { var rows = Math.ceil(arr.length / columns); var res = []; for (var i = 0; i < rows; i++) { tmp = []; for (var j = 0, index = i; j < columns; j++) { if (index < arr.length) tmp.push(arr[index]); index += rows; } res.push(tmp); } return res; } console.log(getOutput(array, 7)) 

JSFiddle在這里可用: https ://jsfiddle.net/varunsharma38/fwfz4veo/4/

我不明白我在想什么。 盡管我不介意使用某些庫,但我更喜歡基於Vanilla JS的解決方案。

提前致謝!!

這是另一個使用array#reduce解決方案。

 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], columns = 7, result = arr.reduce((r,v,i,a) => { var index = i% (Math.ceil(a.length/columns)); r[index] = r[index] || []; r[index].push(v); return r; },[]); console.log(result); 

暫無
暫無

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

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