让我说我有一系列let arr = [null, null, null, null, null, null, null, null, null]
包含9个项目。
我有9个<button data-index>
,每个人都有data-index=0
到data-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
?
这是人工智能游戏的动作。
答案 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);