我知道绝对有更好的洗牌方式,因此有较差的洗牌方式,但我正在尝试弄清楚此功能的工作原理。 俗话说:“如果你不能向三岁的孩子解释它,那你就不理解它”。 我很难向三岁的孩子解释此功能。 我对函数的功能发表了一些评论,但是有人可以详细描述arr [i]的值设置为temp后,该函数的每个步骤如何最重要地工作。

var shuffle = function(array) {
    //creates a copy of the array
    array = array.slice()
    //iterates through the array
    for (var i = 0; i < array.length; i++){
      //generates a random index no longer than the length of the array
      var j = Math.floor(Math.random() * array.length);
      //stores the iterated values of array[i]
      var temp = array[i];
      //confusing part!
      array[i] = array[j];
      //confusing part!
      array[j] = temp;
    }
    //returns the newly modified copy of the original array
    return array;
  };

===============>>#1 票数:0

那三行用于在array[i]array[j]之间交换值。

  1. array[i]值存储在temp

  2. array[j]值存储在array[i] 现在, array[i]的值为array[j]

  3. 将值从temp恢复到array[j] 现在, array[j]具有array[i]的实际值。

此步骤之后,在值array[i]将在array[j]和的值array[j]将在array[i]

您实现的算法是Fisher-Yates shuffle的稍有不同的版本。

基本上,在每次迭代中,都会选择一个随机数(严格小于数组大小的长度)。 然后,将交换当前索引( array[i] )上的元素和与随机选取的索引( array[j] )相对应的元素。

===============>>#2 票数:0

您标记为“令人困惑”的部分只是将当前数组元素的值与随机选择的元素交换。 它将当前值放入临时变量中,将当前元素替换为随机元素,然后将临时元素替换为随机元素。

  ask by translate from so

未解决问题?本站智能推荐: