带数字的数组(5 +百万)

时间:2016-01-19 20:19:05

标签: javascript arrays numbers

我需要一个“列表”,其数字范围从0开始,到500万左右。我还必须在webbrowser中显示这个,所以我尝试了javascript和php。当然,在“加载”所有数字时,浏览器崩溃了。有办法防止这种情况吗?实际上让它在浏览器中工作?我猜Javascript不是正确的语言,但我怎么能解决这个问题呢?帮助将不胜感激:))

这是迄今为止的代码

function range()
{
    var array = [];
    var start = (arguments[0] ? arguments[0] : 0);
    var end   = (arguments[1] ? arguments[1] : 9);
    if (start == end) { array.push(start); return array; }
    var inc   = (arguments[2] ? Math.abs(arguments[2]) : 1);
    inc *= (start > end ? -1 : 1);
    for (var i = start; (start < end ? i <= end : i >= end) ; i += inc)
        array.push(i);
    return array;
}

var foo = range(1, 5607249)

for(var i=0;i<foo.length;i++){
  document.write(foo[i]); 
}

1 个答案:

答案 0 :(得分:2)

在不崩溃浏览器的情况下显示大量数据的唯一方法是实现某种分页系统。意思是,一次只显示一大块结果。您可以通过设置一次显示的最大结果数并跟踪页码来完成此操作。

function range()
{
    var array = [];
    var start = (arguments[0] ? arguments[0] : 0);
    var end   = (arguments[1] ? arguments[1] : 9);
    if (start == end) { array.push(start); return array; }
    var inc   = (arguments[2] ? Math.abs(arguments[2]) : 1);
    inc *= (start > end ? -1 : 1);
    for (var i = start; (start < end ? i <= end : i >= end) ; i += inc)
        array.push(i);
    return array;
}

var foo = range(1, 5607249);
var results = document.querySelector('.results');
var page = 0;
var PAGE_LENGTH = 100;
function showResults() {
  var start = page * PAGE_LENGTH;
  var end = start + PAGE_LENGTH;
  // Write them all at once and put line breaks between them
  results.innerHTML = foo.slice(start, end).join('<br />');
}

document.querySelector('.prev').addEventListener('click', function() {
  // Make sure we don't go past the first page
  page = Math.max(0, page - 1);
  showResults();
});
document.querySelector('.next').addEventListener('click', function() {
  // Don't go past the end of the results 
  page = Math.min(page + 1, foo.length / PAGE_LENGTH - 1);
  showResults();
});

showResults();
<div class="results"></div>
<button class="prev">Prev</button>
<button class="next">Next</button>