Javascript:循环遍历不同索引的数组

时间:2014-08-07 19:20:05

标签: javascript arrays loops

我有一个非常大的对象数组 - 大约30000。

     randomStart = Math.floor( Math.random() * arr.length ) 

我从总长度中选择一个随机范围。

我想要做的是从randomStart开始到randomStart + n结束遍历数组。

注意的: 此数组必须保持不变,因为重新渲染整个集合的计算成本太高。

最好的方法是什么?应该使用什么循环范例:forwhile

3 个答案:

答案 0 :(得分:0)

不要在for循环的开头设置var i = 0,只需将其设置为起始索引,然后将停止条件设置为i < array.length,而不是将其设置为i < ending_index

这是有效的,因为您然后通过istart之间的所有索引迭代end_index,就像在从0迭代到“{1}}的”正常“for循环一样数组的结尾。

答案 1 :(得分:0)

如果您尝试批量处理数组,请尝试此操作。您必须根据您的偏好调整批次限制。

function ProcessLargeArray() {
    var largeArray = [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];

    var batchLimit = 10;

    for (var startIndex = 0; startIndex < largeArray.length; startIndex = startIndex + batchLimit) {
        ProcessBatch(largeArray, startIndex, GetEndIndex(startIndex, batchLimit, largeArray.length));
    }

}

function GetEndIndex(startIndex, batchLimit, arrayLength) {
    var endIndex = startIndex + batchLimit;

    if (endIndex > arrayLength) {
       return arrayLength;
    }

    return endIndex;
}

function ProcessBatch(someArray, startIndex, endIndex) {
    console.log("Start Batch from " + startIndex + " to " + endIndex);
    for (var i = startIndex; i < endIndex; i++) {
       console.log(someArray[i]);
    }
    console.log("Ending Batch from " + startIndex + " to " + endIndex);
}

答案 2 :(得分:-3)

var arr = [1,2,3,4];
var batchSize = 2;
var randomStart = Math.floor(Math.random() * (arr.length - batchSize));
for (var i = randomStart; i < randomStart + batchSize ; i++) {
     ///Code here
}