【发布时间】: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 < allBoulders.length;应该用分号隔开,不能用逗号。 4. 您可能希望将您的i声明为let i = 0
标签: javascript for-loop random counter