我对此code有疑问 我只是想知道是否有一种方法可以在循环结束时重复数组。
HTML:
<div id="words" class="word"></div>
<button>word</button>
使用Javascript:
$(function () {
var data = {"seed": [
{
"num1":"title1",
"num2":"title2",
"num3": [ "1","2","3" ]
},
{
"num1":"title3",
"num2":"title4",
"num3": [ "a","b","c" ]
},
{
"num1":"title5",
"num2":"title6",
"num3": [ "d","gh","34" ]
}
]};
var conta = data.seed.length;
var recorre = data.seed;
//alert(conta);
function getNumbers() {
var jokeId = Math.floor((Math.random()*conta));
var joke = $('.word');
var result = data.seed[jokeId].num3;
var categ = data.seed[jokeId].num1;
joke.empty()
for (var c in result) {
var newElement = document.createElement('div');
newElement.id = result[c];
newElement.innerHTML = result[c];
joke.append(newElement);
}
}
$( "button" ).click(function() {
getNumbers();
});
});
答案 0 :(得分:0)
@MitchWheat在上面的评论中提供了一个很好的线索。提前洗牌是一种选择:
data
。data
并显示下一个按钮。FWIW:Fisher-Yates shuffle非常容易实现......它类似于:
function shuffle(arr) {
var i, j, a, b;
for(i = arr.length - 1; i <= 1; i--) {
j = Math.floor(Math.random() * i);
a = arr[i];
b = arr[j];
arr[i] = b;
arr[j] = a;
}
}
只需splice()
你已经使用的那些:
data
复制到另一个数组copy
。copy
。var item = copy.splice(randomIndex, 1)
data
复制到copy
。实际上,你是以某种懒惰的方式在这里做一次费舍尔 - 耶茨洗牌的 。因为您从完整数组开始,然后选择一个随机值并将其拉出(而不是交换它),然后将大小减小1,而不是递减i
。