【问题标题】:How to increment in forloop in random iterations?如何在随机迭代中增加 for 循环?
【发布时间】:2021-12-27 08:12:38
【问题描述】:

我正在尝试将随机数量的“巨石”数据添加到我的“位置”数据中。我想使用 forloop 生成随机数量的巨石放入每个“位置”。我似乎不知道应该使用 forEach 还是 forLoop。本质上,我想知道如何生成一个在随机迭代中递增的 forloop。 (即 index=0,randomNum = 5 => nextIndex = 0+5,randomNum = 3,thirdIndex = 5+3 等等)

这是我的 randomNum 生成器

const randomNum = (min, max) => {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min) + min)
}

这是我的巨石设置随机forLoop(不起作用)

const allBoulders = async() => {await Boulder.find().exec()}

for (i=0, i < allBoulders.length; i+=upperCount;) {
    console.log(i)
    const area = location.area;
    const place = location.place;
    const latitude = location.latitude;
    const longitude = location.longitude;
    const boulderLocation = new Location({area: area, place: place, latitude: latitude, longitude: longitude});
    const upperCount = indexCount + randomNum(1, 5)
    const boulderSet = allBoulders.slice(indexCount, upperCount);
    boulderLocation.boulders.push(...boulderSet);
    // await boulderLocation.save()
    console.log(boulderLocation)
    indexCount = upperCount;
};

我收到了错误:

for (i=0, i < allBoulders.length; i+=upperCount;) {
                                     ^

ReferenceError: upperCount is not defined

任何帮助将不胜感激!提前致谢!

更新[已解决]: 感谢 swift-lynx 的回答,我得到了它的工作

locations.forEach(async(location) => {
    const allBoulders =  await Boulder.find().exec()
    // console.log(foundAllBoulders);
    for (let i = 0; i < allBoulders.length;) {
        const area = location.area;
        const place = location.place;
        const latitude = location.latitude;
        const longitude = location.longitude;
        const boulderLocation = new Location({area: area, place: place, latitude: latitude, longitude: longitude});
        const random = randomNum(1, 5);
        const upperCount = i + random;
        const boulderSet = allBoulders.slice(i, upperCount);
        boulderLocation.boulders.push(...boulderSet);
        // await boulderLocation.save()
        console.log(boulderLocation);
        i += random;
    }
})

我使用了一个 forEach 以便我可以调用异步函数,放置了一个 forloop,其中 randomNum 在循环中与 i 一起生成,从设置为 const "random" 的相同 randomNum 迭代。

【问题讨论】:

  • allBoulders 是一个函数,而不是一个数组。你需要调用它(并使用await,因为它是一个异步函数)。
  • 1. upperCount 应该在循环外声明,而不是在循环内。 2.i+=upperCount;不应该有分号。 3.i=0, i &lt; allBoulders.length;应该用分号隔开,不能用逗号。 4. 您可能希望将您的i 声明为let i = 0

标签: javascript for-loop random counter


【解决方案1】:

使用randomNum 函数随机递增的循环可以这样完成:

const randomNum = (min, max) => {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min) + min);
}

// random increments
for (let i = 0; i < 20; i += randomNum(1, 5)) {
    console.log(i);
}

如果你想在 for 循环中使用随机数,你可以这样做:

// random increments and use random number inside of for loop
for (let i = 0; i < 20;) {
    // generate random number
    const random = randomNum(1, 5);

    // use it as you like
    console.log(random);

    // increment i manually at the end of the loop
    i += randomNum(1, 5);
}

循环以 1 到 5 之间的随机步长递增,不包括 5。

【讨论】:

  • 是否可以在 forloop 中使用我的 randomNum 并生成相同的数字以在 forloop 中使用并递增?
  • 稍作修改,是的。我更新了我的答案,看看。
  • 我让它工作了。确实在循环中设置“i”就是答案。我用解决方案更新了我的问题。 -干杯!
猜你喜欢
  • 2020-08-05
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2016-10-20
  • 1970-01-01
  • 2016-08-31
  • 2021-05-03
相关资源
最近更新 更多