【发布时间】:2020-06-12 14:54:19
【问题描述】:
我正在开发一个简单的游戏,它允许用户从某个 Cat Api 生成 1 到 5 个 Cat 图像。然后,在单击开始按钮后,应用程序会生成这些猫的影子副本(不透明度低)。游戏稍后将涉及拖动底部图像并将它们拟合到它们的阴影副本,这些副本是随机定位的(只有这样游戏才有意义)。然后我打算做一些更多的功能,比如时间计数器、积分等,只是为了学习目的。
但是正在努力的是创建一个唯一的随机数(这将是特定猫的索引),并且在迭代过程中不会重复......
这里是代码
const newArray = []; //
const catsArrayList = [...catBoardCopy.querySelectorAll('.cat')] //Array with cat images
function randomizeIndex() { // randomize an index number
let randomIndex = Math.floor((Math.random() * catsArrayList.length - 1) + 1);
console.log(randomIndex);
return randomIndex;
}
catsArrayList.forEach(catElement => { // here I am iterating over an array with cats which length is for example 5(this is max actually)
newArray.push(catsArrayList[randomizeIndex()]); // and pushing those elements with randomly generated index to the new array
})
newArray.forEach(newCat => {
shadowCatsContainer.appendChild(newCat); // here random cats are finally put to html container
})
所有这些工作直到其中一个随机数至少重复一次......当然这实际上发生在 90% 的时间。
我想这不是一个简单的解决方案。我非常努力地让它与不同的技术、不同的循环、不同的数组方法一起工作,什么都没有:(另外请注意我是初学者,所以我需要详尽的指导:)
祝你有美好的一天。
【问题讨论】:
-
在像您这样的情况下执行此操作的标准方法是按顺序用索引填充数组,然后打乱数组。然后,您可以从数组中提取数字并且永远不会重复。
-
您会选择使用 Set 吗?
-
也可以考虑使用 Array.map 函数,而不是遍历数组并将值推送到新数组。
-
你想要什么数字范围?示例:1 - 100 ?
-
看起来像 cat 数组中的索引