我有一个数组:
arr = ["blue", "red", "green"];
如何从数组中获取一个随机元素,除了值为"red"
的元素?
我知道我使用以下内容来获取随机数组元素但是如何设置“where / if”语句?
答案 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;