1
for(var j, x, i = answerArr.length; i; j = parseInt(Math.random() * i), x = answerArr[--i], answerArr[i] = answerArr[j], answerArr[j] = x);
        for(var t = 0; t < answerArr.length; t++)
        {
            $("#kc_answers").append('<li><span class="kc_answer_span">' + $(answerArr[t]).find('aText').text() + '</span></li>');
        }

有人可以逐步解释代码的不同部分在做什么吗?

这似乎是一个非常常见的代码,稍微改变了以随机顺序将部分数组附加到 div。我了解大量的 javascript 和 jquery,但我并没有完全理解这一点。

我认为这对其他人也很有用,因为这段代码正在改组一个数组并将这些部分吐出到 html 中。似乎这可能是一个共同的需求。

4

2 回答 2

3

这是一个Fisher-Yates 洗牌。确实很常见。

于 2013-07-15T13:34:02.020 回答
3

这可以重写为:

    // loop from arrayArr.length - 1 to 0
    for (var randomIndex, temp, i = answerArr.length - 1; i >= 0; i--)
    {
        // get a random index in the array.
        randomIndex = Math.floor(Math.random() * i);
        // put the current index in a temporary variable
        temp = answerArray[i];
        // assign the random index to the current index
        answerArr[i] = answerArr[randomIndex];
        // assign the temporary variable to the random index
        answerArr[randomIndex] = temp;
    }
    // now output the new shuffled array
    for(var t = 0; t < answerArr.length; t++)
    {
        $("#kc_answers").append('<li><span class="kc_answer_span">' + $(answerArr[t]).find('aText').text() + '</span></li>');
    }

更新

关于for loop没有身体,基本上这是 a 的for loop工作方式:

for (run what is in here once;
     evaluate this each time after the next statement and the body... if it evalutes to false then exit;
     run what is here each time after the body)
{
    // run this until the second statement is false
}

所以原代码的作者是这样做的:

for (run this once;
     evaluate this expression each time;
     forget having a body, just put everything in here!!); 
于 2013-07-15T13:29:13.950 回答