Javascript 生成许多随机数

Javascript 生成许多随机数,javascript,random,Javascript,Random,我需要生成400万个9位数的10亿到10亿之间的唯一随机数。用零填充到9位 我的脚本对等式400000数字有效(但速度较慢)。但不是400万 我需要一个文本文件中的数字。只需按住CTRL+S键即可输出 有没有办法优化内存/性能 function zeroPad(num, places) { var zero = places - num.toString().length + 1; return Array(+(zero > 0 && zero)).join("0"

我需要生成400万个9位数的10亿到10亿之间的唯一随机数。用零填充到9位

我的脚本对等式400000数字有效(但速度较慢)。但不是400万

我需要一个文本文件中的数字。只需按住CTRL+S键即可输出

有没有办法优化内存/性能

function zeroPad(num, places) {
  var zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join("0") + num;
}
var arr = []
while (arr.length < 4000000) {
  var randomnumber = Math.ceil(Math.random() * 100000000)
  if (arr.indexOf(randomnumber) > -1) continue;
  arr[arr.length] = randomnumber;
}
for (i = 0; i < arr.length; i++) {
  document.write(zeroPad(arr[i], 9) + '<br />');
}
函数零位(num,places){
var zero=places-num.toString().length+1;
返回数组(+(0>0&&0)).join(“0”)+num;
}
var arr=[]
而(平均长度<4000000){
var randomnumber=Math.ceil(Math.random()*100000000)
如果(arr.indexOf(randomnumber)>-1)继续;
arr[arr.length]=随机数;
}
对于(i=0;i';
}
您可以在以下位置使用和:

const fs=require('fs');
const writeStream=fs.createWriteStream('numbers.txt',{flags:'w'});
writeStream
.on('error',error=>console.log(error))
.on('close',()=>console.log('done');
const uniques=[];
函数write10k(){
设i=0;
而(i<1e4){
const randomnumber=Math.ceil(Math.random()*1e8);
if(uniques.indexOf(randomnumber)>-1)继续;
uniques[uniques.length]=随机数;
常量行=零位(随机数,9)+'\n';
writeStream.write(行);
i++;
}
}
函数*writeGenerator(){
对于(设i=1;i 0&&0)).join('0')+num;
}
常量=writeGenerator();
设next=iter.next();
而(!next.done){
下一步=iter.next();
}

这将创建包含400万个唯一随机数的文件
numbers.txt

这是一个要打印在某些包装和印刷公司的文本文件中的数字

最后,我只是编辑了我的代码,并以不同的间隔运行了10次

我肯定会看看node.js


感谢您的输入

出于好奇,为什么有人需要400万个唯一的数字?我认为每次您编写
文档时都会出现缩进错误。编写
浏览器会进行DOM解析和其他昂贵的操作。您最好将所有内容合并并将其添加到DOM中一次。虽然有400万个数字,但字符串将变得太大。试着把它分成1000个数字。虽然我不认为浏览器可以处理4M。提高性能的最好方法是不要在浏览器内部执行此操作:在生成HTML文档时,您可能要花费比生成数字本身更多的时间来进行布局和格式化。考虑使用NoDE.js或其他在命令行运行的文件,并且可以直接写入文件。如果需要在文本文件中写入这些数字,为什么不使用节点?请查看
fs.createWriteStream
:感谢您的回答。我得到一个Javascript堆内存不足错误。也许我的机器对于这个操作来说太小了
const fs = require('fs');
const writeStream = fs.createWriteStream('numbers.txt', {flags: 'w'});

writeStream
.on('error', error => console.log(error))
.on('close', () => console.log('done'));

const uniques = [];

function write10k() {
  let i = 0;
  while (i < 1e4) {
    const randomnumber = Math.ceil(Math.random() * 1e8);
    if (uniques.indexOf(randomnumber) > -1) continue;
    uniques[uniques.length] = randomnumber;
    const line = zeroPad(randomnumber, 9) + '\n';
    writeStream.write(line);
    i++;
  }
}

function* writeGenerator() {
  for (let i = 1; i <= 4e6; i++) {
    yield write10k();
    console.log('wrote ' + (1e3  * i));
  }
  writeStream.end();
}

function zeroPad(num, places) {
  const zero = places - num.toString().length + 1;
  return Array(+(zero > 0 && zero)).join('0') + num;
}

const iter = writeGenerator();
let next = iter.next();

while (!next.done) {
  next = iter.next();
}