2017-05-04 136 views
-1

我有一個數組,可以是任意長度。並需要將其分成幾個部分。 16Javascript:將數組拆分爲段

var size1 = 14; 
var size2 = 16; 
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
     22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]; 
var arrays = []; 
if (a.length > 14){ 
    for (i = 0; i < 14; i++) { 
     arrays.push(a.splice(0, size1)); 
    } 
    for (i = 14 ; i < a.length; i++){ 
     arrays.push(a.splice(0, size2)); 

    } 
} else { 
    arrays.push(a.splice(0, size1)); 

} 
console.log(arrays); 

的長度在首節過後將是14的長度,而且有但是根據我在做什麼我的數組保持分裂只在14你能我如何能做到這一點建議嗎?

謝謝

回答

0

編輯:那麼,像這樣呢?

var size1 = 14; 
var size2 = 16; 
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]; 

var head = a.slice(0, size1); 
var arrays = [head]; 
while (size1 < a.length){ 
    arrays.push(a.slice(size1, Math.min(size1+size2, a.length))); 
    size1 += size2; 
} 

console.log(arrays) 
+0

你的答案似乎並不是原創的。你認爲呢? – RomanPerekhrest

+0

是的,這給了我答案。謝謝你,我真的很感謝大家誰在這方面指導我。 –

1

使用Array.prototype.slice()功能的解決方案:

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
 
    22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], 
 
    size1 = 14, 
 
    size2 = 16, 
 
    arrays = []; 
 

 
[0, size1, size2].forEach(function (v, i, arr) { 
 
    arrays.push((arr[i+1])? a.slice(v, v + arr[i+1]) : a.slice(arr[i-1] + v)); 
 
}); 
 

 
console.log(arrays);

+0

嗨@Roman,感謝你的幫助。但我的數組停在2(即14,16),其餘數字需要進入下一個數組部分。你能建議我如何自動化嗎? –

+0

你的意思是:前兩個固定長度塊和最後一個塊應該包含所有剩餘的項目? – RomanPerekhrest

+0

所以它應該是14,16,16,16,16,16 ......等等......第一部分的長度是14,然後它的長度應該是16. –

0

您可以嘗試使用所有動態數組大小,它會得到您想要的輸出。 希望你正在尋找這個解決方案。

var size1 = 14; 
var size2 = 16; 
var flag=0; 
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 
       22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]; 
var arrays = []; 
var t=a.length/14; 
while(a.length>0){ 
     if (flag==0 && a.length > 14){ 
       arrays.push(a.splice(0, size1)); 
       flag=1; 
     } else if(a.length>=16){ 
      arrays.push(a.splice(0, size2)); 
     } 
     else{ 
      arrays.push(a.splice(0, a.length)); 
     } 
} 
     console.log(arrays) 
1

您可以使用一個數組作爲塊的長度,其餘爲零,並通過保留前一長度的長度來映射塊。

它適用於任意數量的塊。

var chunks = [14, 16, 0], 
 
    array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40], 
 
    result = chunks.map((last => a => array.slice(last, a ? (last += a) : undefined))(0)); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }