使用费雪-耶茨算法对数组进行洗牌

JavaScriptJavaScriptBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,我们将探索费雪-耶茨(Fisher-Yates)算法及其在JavaScript中的实现。具体来说,我们将重点关注如何使用该算法对数组进行洗牌操作。在本实验结束时,你将更好地理解费雪-耶茨算法的工作原理,以及如何使用它来随机化数组中元素的顺序。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("`JavaScript`")) -.-> javascript/BasicConceptsGroup(["`Basic Concepts`"]) javascript(("`JavaScript`")) -.-> javascript/AdvancedConceptsGroup(["`Advanced Concepts`"]) javascript/BasicConceptsGroup -.-> javascript/variables("`Variables`") javascript/BasicConceptsGroup -.-> javascript/data_types("`Data Types`") javascript/BasicConceptsGroup -.-> javascript/arith_ops("`Arithmetic Operators`") javascript/BasicConceptsGroup -.-> javascript/comp_ops("`Comparison Operators`") javascript/BasicConceptsGroup -.-> javascript/loops("`Loops`") javascript/BasicConceptsGroup -.-> javascript/array_methods("`Array Methods`") javascript/AdvancedConceptsGroup -.-> javascript/spread_rest("`Spread and Rest Operators`") subgraph Lab Skills javascript/variables -.-> lab-28615{{"`使用费雪-耶茨算法对数组进行洗牌`"}} javascript/data_types -.-> lab-28615{{"`使用费雪-耶茨算法对数组进行洗牌`"}} javascript/arith_ops -.-> lab-28615{{"`使用费雪-耶茨算法对数组进行洗牌`"}} javascript/comp_ops -.-> lab-28615{{"`使用费雪-耶茨算法对数组进行洗牌`"}} javascript/loops -.-> lab-28615{{"`使用费雪-耶茨算法对数组进行洗牌`"}} javascript/array_methods -.-> lab-28615{{"`使用费雪-耶茨算法对数组进行洗牌`"}} javascript/spread_rest -.-> lab-28615{{"`使用费雪-耶茨算法对数组进行洗牌`"}} end

数组洗牌算法

要在JavaScript中对数组进行洗牌操作,请使用费雪-耶茨(Fisher-Yates)算法。该算法会随机重新排列数组中的元素,并返回一个新数组。

要开始练习编码,请打开终端/SSH并输入 node

以下是费雪-耶茨算法的代码:

const shuffle = ([...arr]) => {
  let m = arr.length;
  while (m) {
    const i = Math.floor(Math.random() * m--);
    [arr[m], arr[i]] = [arr[i], arr[m]];
  }
  return arr;
};

要对数组进行洗牌操作,将数组传递给 shuffle 函数,它将返回洗牌后的数组。例如:

const foo = [1, 2, 3];
shuffle(foo); // 返回 [2, 3, 1],而 foo 仍然是 [1, 2, 3]

总结

恭喜你!你已经完成了数组洗牌实验。你可以在LabEx中练习更多实验来提升你的技能。

您可能感兴趣的其他 JavaScript 教程