gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:27:57 25 4
gpt4 key购买 nike

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

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

    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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com