第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將JS數(shù)組拆分為N個數(shù)組

將JS數(shù)組拆分為N個數(shù)組

想象一下,我有一個像這樣的JS數(shù)組:var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];我想要的是將該數(shù)組拆分為N個較小的數(shù)組。例如:split_list_in_n(a, 2)[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11]]For N = 3:[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11]]For N = 4:[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11]]For N = 5:[[1, 2, 3], [4, 5], [6, 7], [8, 9], [10, 11]]對于Python,我有這個:def split_list_in_n(l, cols):    """ Split up a list in n lists evenly size chuncks """    start = 0    for i in xrange(cols):        stop = start + len(l[i::cols])        yield l[start:stop]        start = stop對于JS,我可以提出的最佳解決方案是遞歸函數(shù),但我不喜歡它,因為它既復雜又丑陋。這個內(nèi)部函數(shù)返回一個像這樣的數(shù)組[1,2,3,null,4,5,6,null,7,8],然后我必須再次循環(huán)并手動拆分它。(我的第一次嘗試是返回此:[1、2、3,[4、5、6,[7、8、9]]],然后我決定使用null分隔符進行操作。)function split(array, cols) {    if (cols==1) return array;    var size = Math.ceil(array.length / cols);    return array.slice(0, size).concat([null]).concat(split(array.slice(size), cols-1));}這是一個jsfiddle:http : //jsfiddle.net/uduhH/你會怎么做?謝謝!
查看完整描述

3 回答

?
智慧大石

TA貢獻1946條經(jīng)驗 獲得超3個贊

您可以將切片設為“平衡”(子數(shù)組的長度差異盡可能小)或“偶數(shù)”(除了最后一個的所有子數(shù)組都具有相同的長度):


function chunkify(a, n, balanced) {

    

    if (n < 2)

        return [a];


    var len = a.length,

            out = [],

            i = 0,

            size;


    if (len % n === 0) {

        size = Math.floor(len / n);

        while (i < len) {

            out.push(a.slice(i, i += size));

        }

    }


    else if (balanced) {

        while (i < len) {

            size = Math.ceil((len - i) / n--);

            out.push(a.slice(i, i += size));

        }

    }


    else {


        n--;

        size = Math.floor(len / n);

        if (len % size === 0)

            size--;

        while (i < size * n) {

            out.push(a.slice(i, i += size));

        }

        out.push(a.slice(size * n));


    }


    return out;

}



///////////////////////


onload = function () {

    function $(x) {

        return document.getElementById(x);

    }


    function calc() {

        var s = +$('s').value, a = [];

        while (s--)

            a.unshift(s);

        var n = +$('n').value;

        $('b').textContent = JSON.stringify(chunkify(a, n, true))

        $('e').textContent = JSON.stringify(chunkify(a, n, false))

    }


    $('s').addEventListener('input', calc);

    $('n').addEventListener('input', calc);

    calc();

}

<p>slice <input type="number" value="20" id="s"> items into

<input type="number" value="6" id="n"> chunks:</p>

<pre id="b"></pre>

<pre id="e"></pre>


查看完整回答
反對 回復 2019-10-08
?
慕尼黑5688855

TA貢獻1848條經(jīng)驗 獲得超2個贊

我認為使用拼接的這種方式最干凈:


splitToChunks(array, parts) {

    let result = [];

    for (let i = parts; i > 0; i--) {

        result.push(array.splice(0, Math.ceil(array.length / i)));

    }

    return result;

}

例如,對于parts = 3,您將占剩余部分的1/3,然后是1/2,然后是數(shù)組的其余部分。Math.ceil確保在元素數(shù)量不均勻的情況下,它們將排到最早的塊。


(注意:這會破壞初始數(shù)組。)


查看完整回答
反對 回復 2019-10-08
  • 3 回答
  • 0 關注
  • 1917 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號