javascript - 生成许多​​随机数

标签 javascript random

我需要生成 400 万个唯一的随机数,范围为 1 到 10 亿个 9 位数字。用零填充直到 9 位。

我的脚本适用于 eq.(但速度很慢)。 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 />');
}

最佳答案

您可以使用generatorsfile write streamsNode.js :

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();
}

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

关于javascript - 生成许多​​随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43238963/

相关文章:

javascript - 如何在 Jest 中使用 axios.create 测试外部模块返回的 promise ?

javascript - 提取 URL 末尾字符之间的字符串

javascript - 单击页面卸载事件上的链接

javascript - Node.js 网页抓取问题 |请求|欢呼

performance - 随机数,C++11 与 Boost

python - 按随机顺序做事?

javascript - JQuery .css 底部属性未将 css 应用于元素

ios - 随机化预定义的数字

c - 将ASCII字符存储在C中的数组中

oracle - 生成随机 0 或 1 - Oracle