gpt4 book ai didi

javascript - JS : get x amount of random numbers inside interval with while loop

转载 作者:行者123 更新时间:2023-12-03 05:01:23 28 4
gpt4 key购买 nike

我正在开发一款有 6 种可用花色的纸牌游戏,但可以有 2-6 名玩家,我只希望花色数量与玩家数量相匹配。

let players = 4    
const suits = [1, 2, 3, 4, 5, 6]

当然,我希望它们随机出现。

我想出了以下解决方案:

export function getRandomSuits(nrOfPlayers) {
const rangeMin = 1;
const rangeMax = 6;
const amount = nrOfPlayers;
let nums = [];

let getRandomNumber = function() {
return Math.floor((Math.random() * rangeMax) + rangeMin);
}

while (nums.length < amount) {
let nr = getRandomNumber();
var numberExists = _.indexOf(nums, nr);
console.log(numberExists);
if(numberExists < 0) {
nums.push(nr);
}
}

return nums;
}

自从我使用“while循环”这个东西以来已经有一段时间了,所以我对它感觉不太舒服。

我的问题是:

  1. 这是好的做法还是有更好的解决方案?
  2. 是否有任何性能或其他实际原因导致此解决方案不佳?
  3. 我是不是想太多了?

最佳答案

  1. 在我看来,我认为不需要函数 getRandomNumber()。尽管如此,这取决于偏好。
    我会选择:

    export function getRandomSuits(nrOfPlayers) {
    const rangeMin = 1;
    const rangeMax = 6;
    let nums = [];

    while (nums.length < nrOfPlayers) {
    let nr = Math.floor((Math.random() * rangeMax) + rangeMin);
    var numberExists = _.indexOf(nums, nr);
    if(numberExists < 0) {
    nums.push(nr);
    }
    }

    return nums;
    }
  2. 不一定。只是清洁度和偏好的问题。

  3. 也许? :-)

第二种方法(稍微好一点)使用临时数组:

export function getRandomSuits(nrOfPlayers) {

const rangeMin = 1;
const rangeMax = 6;
var tempNum = [];
for(i = 0; i <= rangeMax - rangeMin; i++){
tempNum[i] = rangeMin + i;
}
let nums = [];
while (nums.length < nrOfPlayers) {
let index = Math.floor(Math.random() * tempNum.length);
var numberExists = _.indexOf(nums, tempNum[index]);
if(numberExists < 0) {
nums.push(tempNum[index]);
tempNum.splice(tempNum, index));
}
}

return nums;
}

关于javascript - JS : get x amount of random numbers inside interval with while loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42210353/

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