javascript - 如何使用 Node.js 从给定路径中选择多个随机文件?

标签 javascript node.js

我正在尝试从给定目录中选择一些随机文件。以下是我目前的实现;但是,文件夹中的文件太多,将它们全部迭代,然后随机选择几个文件似乎有些过分。

有更好的解决方案吗?因为我想知道文件夹里面的所有文件是随机选择的前提吗?

    const dirs = fs.readdirSync(IMAGE_BANK_SRC)
          .map(file => {
              return path.join(IMAGE_BANK_SRC, file);
          });

    const srcs_dup = [];

    dirs.forEach(path => {
        fs.readdirSync(path).forEach(file => {
            srcs_dup.push(file);
        });
    });

    // Pick few random ones from `srcs_dup`

要求:

  1. 选择的随机文件应该是唯一的
  2. 如果文件夹包含的文件少于预期,代码仍然有效
  3. 尽快

最佳答案

嗯,readDir & readDirSync 返回一个数组。您可以使用 length 属性避免映射整个路径数组。我们可以使用长度的百分比来创建一个动态样本集,然后将样本存储在一个新数组中。

const dirs = fs.readdirSync(IMAGE_BANK_SRC);
const length = dirs.length;
const sampleSet = 25/100 * length;
const getRandomIndex = length => Math.floor( Math.random() * length );

let samples = [];
let usedIndices = [];
let randomIndex = undefined;

for (let i = 0; i < sampleSet; i++){
  do {
    randomIndex = getRandomIndex( length );
  }
  while ( usedIndices.includes( randomIndex ) );

  usedIndicies.push( randomIndex );
  samples.push( dirs[randomIndex] );
}

关于javascript - 如何使用 Node.js 从给定路径中选择多个随机文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42217181/

相关文章:

javascript - 如何正确使用 Nan::HandleScope?

javascript - Python/Django 转义字符串列表,用于 Javascript 解析 JSON

node.js - Cheerio 给出奇怪的结果

Node.JS 等待变量被设置

javascript - 过滤并保存 HAR 文件

javascript - 创建管理面板 Mean.js

javascript - 从对象中获取键/值,执行功能并发回

javascript - jQuery slider 设置不正确的 ui.values

node.js - Outlook 电子邮件中的链接无需单击即可激活

javascript - 如何在 npm install 中克服这个错误?