获取值不相等的随机数组元素

时间:2016-05-27 02:30:15

标签: javascript arrays

我有一个数组:

arr = ["blue", "red", "green"];

如何从数组中获取一个随机元素,除了值为"red"的元素?

我知道我使用以下内容来获取随机数组元素但是如何设置“where / if”语句?

5 个答案:

答案 0 :(得分:6)

保证完成的代码如下所示:

var arr = ["blue", "red", "green"];

var onlyValidValues = arr.filter(v => v !== 'red');

if (onlyValidValues.length === 0) {
    throw new Error('empty array');
}

var randomItem = onlyValidValues[Math.floor(Math.random() * onlyValidValues.length)];

因此,与其他建议相比,它只从从“禁止”#34;中清除的阵列中选择随机值。元件。

答案 1 :(得分:2)

在while循环中使用 Math.random()

var arr = ["blue", "red", "green"],
  val = 'red';

while (val == 'red')
  val = arr[Math.floor(Math.random() * arr.length)]

console.log(val);

或者复制数组并从中删除红色,然后获取元素

var arr = ["blue", "red", "green"],
  arrNew = arr.slice(0); // copy the array
arrNew.splice(arr.indexOf('red'), 1); // remove red from it

val = arrNew[Math.floor(Math.random() * arrNew.length)] //get random element

console.log(val);

如果数组中有多个red元素,请使用{strong> @zerkms 答案中的filter()

答案 2 :(得分:1)

你可以这样做:

CacheEntry

答案 3 :(得分:1)

这可能很有用..

var arr = ["blue", "red", "green"];
var item = arr[Math.floor(Math.random()*arr.length)];
while(item == "red"){
item = arr[Math.floor(Math.random()*arr.length)];

}
document.write(item)

希望它有助于解决您的问题

答案 4 :(得分:1)

我使用新的ES6功能完成了一项功能。 使用我的功能,您可以排除多个元素。 这是我的方法:



const arr = ["blue", "red", "green"];

function getRandomElementExcluding (...excluded){
  try {
    let random = Math.ceil(Math.random() * arr.length - 1);
    
    if(excluded === undefined)
      return arr[random];
    else if (excluded.includes(arr[random])) 
      return getRandomElementExcluding(...excluded);
    else 
      return arr[random];
  } catch (e){
    return false;
  }
}

console.log( getRandomElementExcluding('red') );
// console.log( getRandomElementExcluding('red', 'green', 'blue') ); It will return false;