从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) ]);
}
另一答案
更好的方法:
算法
- 同时合并两个数组。假设我们将简洁数组称为
myArray
,并将输出数组初始化为[]
。 - 从myArray获得一个随机数,例如
var element = myArray[Math.floor(Math.random() * myArray.length)]
,并从它的索引获得var index = Math.floor(Math.random() * myArray.length)
。 - 从该索引中拼接myArray,例如
myArray.splice(index, 1)
。 - 将元素推送到输出数组。
- 重复步骤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