如何获取非空的数组的随机元素?

时间:2017-07-02 15:10:24

标签: javascript

让我说我有一系列let arr = [null, null, null, null, null, null, null, null, null]包含9个项目。

我有9个<button data-index>,每个人都有data-index=0data-index=9

如果我点击按钮,请说<button data-index=4>,然后我们将'Cookie'分配给相应的arr索引:arr[4] = 'Cookie'

arr变为[null, null, null, null, 'Cookie', null, null, null, null]

我如何选择arr null的随机元素/索引而不选择arr[4],因为它已包含Cookie

这是人工智能游戏的动作。

4 个答案:

答案 0 :(得分:3)

带过滤器的ES6解决方案:

var arr = [null, null, null, null, 'Cookie', null, null, null, null];

var indexes = Array.from(Array(arr.length).keys());
var availableIndexes = indexes.filter((index) => arr[index] == null);
var selectedIndex = availableIndexes[Math.floor(Math.random()* availableIndexes.length)];

console.log(availableIndexes);
console.log(selectedIndex);

答案 1 :(得分:2)

为了获得数组索引的随机顺序,然后逐个选择它们,可以进行随机抽样。

想法是在开始时将随机索引设置为按钮。而不是在点击时计算随机索引。

答案 2 :(得分:2)

var randomIndex = 0;
while ( arr[randomIndex] != null ) {
    randomIndex = Math.floor( Math.random() * (arr.length - 1) );
}

如果有帮助,请告诉我。

答案 3 :(得分:1)

另一种解决方案:

var arr = [null, null, null, null, 'Cookie', null, null, null, null];
var indexes = [];
for (var i =0; i<arr.length; i++){
    if(arr[i] == null)
        indexes.push(i);
}
var index = indexes[parseInt(Math.random() * (indexes.length - 1))];

alert(index);