我有一个非常大的对象数组 - 大约30000。
randomStart = Math.floor( Math.random() * arr.length )
我从总长度中选择一个随机范围。
我想要做的是从randomStart
开始到randomStart + n
结束遍历数组。
注意的: 此数组必须保持不变,因为重新渲染整个集合的计算成本太高。
最好的方法是什么?应该使用什么循环范例:for
,while
等
答案 0 :(得分:0)
不要在for循环的开头设置var i = 0
,只需将其设置为起始索引,然后将停止条件设置为i < array.length
,而不是将其设置为i < ending_index
。
这是有效的,因为您然后通过i
和start
之间的所有索引迭代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
}