如何根据给定的索引值将大型数组拆分为较小的数组?

4

我有一个大数组,例如:aa=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

我有另一个数组,它保存了基于哪些索引值来对大数组进行分块的值。例如:cc=[10,16]

我希望将数组aa分成新的数组

dd[] = [从0到cc[0]的索引]

ee[] = [从cc[0]的索引到cc[下一个值]的索引]

示例:

dd[] = [1,2,3,4,5,6,7,8,9,10]
ee[] = [11,12,13,14,15,16]

直到 cc[] 具有索引,等等。
如果有人能帮助我理解逻辑,请告诉我。
3个回答

6
您可以使用 Array#mapArray#slice 来处理这些部分。

var array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
    indices = [10, 16],
    result = indices.map(function (a, i, aa) {
        return array.slice(aa[i - 1] || 0, a);
    });
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


有这么多正确的答案,很难选择一个。希望我能都标记上。 - raju

2
您可以使用新的简单数组切片方法: array.slice

    var array=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
    var i,j,temparray,chunk = 10;
    for (i=0,j=array.length; i<j; i+=chunk) {
        temparray = array.slice(i,i+chunk);
        console.info(temparray);
    }


1
如果您不想使用内置方法,则可以像这样做些事情。

function createChunks(aa, cc) {
    var temp = [], chunks = [];
    for(var i=0, j=0, k=0; i<aa.length; i++) {
        if(aa[i] == cc[j]) {
            temp[k] = aa[i];
            chunks.push(temp);
            temp = []; k=0; j++;
        }
        else
            temp[k++] = aa[i];
    }
    return chunks;
}


var aa=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], cc=[10, 16];

var chunks = createChunks(aa, cc);
console.log(JSON.stringify(chunks));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接