簡體   English   中英

如何將數組分成兩半,直到達到一定大小的塊?

[英]How to split an array in half until chunks of a certain size are reached?

我有一個可變長度大於3的數組,可以是奇數或偶數。

例如: var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];

現在,我想將該數組分成兩半。

['a', 'b', 'c', 'd', 'e']['f', 'g', 'h', 'i', 'j']

接下來,我想將這些塊分割成兩半,並繼續這樣做,直到塊的長度為3或2。

最后,我想將這些塊存儲在新數組中。

var newarr = [['a','b','c'],['d','e'],['f','g','h'],['i','j']];

我該怎么做?

一種自暗示的方式來做到這一點是利用一個遞歸函數F:用於將輸入陣列arr如果其長度為<= 3則結果為[arr]否則是F(first_half_of_arr)與級聯F(second_half_of_arr)

在代碼中,它轉換為:

function recursiveSplit(arr) { 
    return arr.length <= 3 ? [arr] : 
        recursiveSplit(arr.slice(0, Math.ceil(arr.length / 2)))
        .concat(recursiveSplit(arr.slice(Math.ceil(arr.length / 2))));
}

您可以排除Math.ceil調用,但是如果這樣做,您將在結果中獲得3個長度的塊之前得到2個長度的塊。

現在, 在實踐中 ,迭代實現應該比遞歸實現更具性能,因為它不需要完全創建和放棄小的數組,因此,如果期望這種方法可以在大數組上運行,則您可能應該避免遞歸。

var arr = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'];
var arr1 = arr.splice(0, Math.ceil(arr.length / 2));

那將把一個數組分成兩半,所以現在arr包含原始數組的后一半,而arr1包含前一半。

您應該能夠在while循環中重復:

while (arr > 3) {
    //continue splicing
}

如果您認為這個答案不夠好(對我以外的任何人來說都沒有意義,我現在很累),請發表評論而不是討厭。

暫無
暫無

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

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