从JavaScript中的数组中选择随机数量的元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从JavaScript中的数组中选择随机数量的元素相关的知识,希望对你有一定的参考价值。

我有2个数组,每个数组都有4个x坐标。总的来说,我想从两个数组中选择3个随机值。因此array1 + array2 = 3个元素。最后,我只是用一种不好的方法使它按我的意愿去做。只是想知道是否有人可以看到一种更有效的方式来生成更好的代码。这就是我最终使它工作的方式。我无法显示我尝试过的内容,因为它已被修改,最终我只是删除了它,然后执行此操作。

enemyCars = [100, 200, 300, 400];    //not actual values

newCarArray = [];    //global
newWallArray = [];    //global

function randomNumber(a, b){
    return Math.round(random(a,b));
}

function chooseCars(){
    let carAmount = randomNumber(0,3);
    let wallAmount = 3 - carAmount;
    print('carAmount ' + carAmount);

    if(carAmount == 0){
        newCarArray = [];
    }
    if(carAmount == 1){
        let a = randomNumber(0,3);
        newCarArray.push(enemyCars[a]);
    }
    if(carAmount == 2){
        let a = randomNumber(0,3);
        newCarArray.push(enemyCars[a]);
        let b = randomNumber(0,3);
        newCarArray.push(enemyCars[b]);
    }
    if(carAmount == 3){
        let a = randomNumber(0,3);
        newCarArray.push(enemyCars[a]);
        let b = randomNumber(0,3);
        newCarArray.push(enemyCars[b]);
        let c = randomNumber(0,3);
        newCarArray.push(enemyCars[c]);
    }

    if(wallAmount == 0){
        newWallArray = [];
    }
    if(wallAmount == 1){
        let a = randomNumber(0,3);
        newWallArray.push(enemyWalls[a]);
    }
    if(wallAmount == 2){
        let a = randomNumber(0,3);
        newWallArray.push(enemyWalls[a]);
        let b = randomNumber(0,3);
        newWallArray.push(enemyWalls[b]);
    }
    if(wallAmount == 3){
        let a = randomNumber(0,3);
        newWallArray.push(enemyWalls[a]);
        let b = randomNumber(0,3);
        newWallArray.push(enemyWalls[b]);
        let c = randomNumber(0,3);
        newWallArray.push(enemyWalls[c]);
    }
}

感谢您的帮助

答案

您只需要一个循环:

 for(let count = 0; count < carAmount; count++) {
    newCarArray.push(enemyCars[ randomNumber(0, 3) ]);
 }
另一答案

更好的方法:

算法

  1. 同时合并两个数组。假设我们将简洁数组称为myArray,并将输出数组初始化为[]
  2. 从myArray获得一个随机数,例如var element = myArray[Math.floor(Math.random() * myArray.length)],并从它的索引获得var index = Math.floor(Math.random() * myArray.length)
  3. 从该索引中拼接myArray,例如myArray.splice(index, 1)
  4. 将元素推送到输出数组。
  5. 重复步骤2、3、4和5三次。

代码

const arr1 = [3, 4, 7, 11];
const arr2 = ['a', 'b', 'e', 'x'];
let counter = 3; //As many numbers you want to pick (should be less than 8)

let myArray = arr1.concat(arr2);
let output = [];
while (counter > 0) {
  let index = Math.floor(Math.random() * myArray.length);
  output.push(myArray[index]);
  myArray.splice(index, 1);
  counter--;
}

console.log(output);

以上是关于从JavaScript中的数组中选择随机数量的元素的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法让两个元素从数组中选择随机项目但不会是同一个项目 - Javascript

如何从 Python 中的数组中选择随机元素? [复制]

有没有一种简单的方法可以从 JavaScript 或任何其他编程语言中的数组中进行随机选择?

从数组中随机选择3个元素

使用javascript从关联数组中选择随机值? [复制]

从数组中选择一个随机元素