如何随机(shuffle)JavaScript数组?

在前端开发中,有时需要将一个数组的元素顺序打乱,即实现“随机”(shuffle)操作。本文将介绍如何用JavaScript来实现这一操作。

方法一:洗牌法

洗牌法是一种常见的打乱数组元素顺序的方法。其基本思路是从数组的最后一个元素开始,不断地向前扫描,然后将当前元素和前面某个随机位置的元素交换位置。重复该过程直至当前元素到达数组的第一个位置。

以下是一个基于洗牌法的JavaScript函数实现:

-------- -------------- -
  --- ---- - - ------------ - -- - - -- ---- -
    ----- - - ------------------------ - -- - ----
    ---------- --------- - ---------- ----------
  -
-

该函数接受一个数组作为参数,并使用for循环对数组进行遍历。在每次循环中,通过Math.random()方法生成一个0到1之间的随机数,然后将其乘以(i+1),再取其下整数,得到一个0到i之间的随机整数j。最后,将第i个元素和第j个元素交换位置。

方法二:递归切分

递归切分法也是一种常见的打乱数组元素顺序的方法。其基本思路是将数组随机地切分成两部分,然后递归地对每一部分进行打乱操作。最终将这些部分合并起来即可得到一个打乱顺序的数组。

以下是一个基于递归切分法的JavaScript函数实现:

-------- -------------- -
  -- ------------- -- -- -
    ------ ------
  -
  ----- ---- - ---
  ----- ----- - ---
  ----- ----- - ------------------------ - --------------
  --- ---- - - -- - - ------------- ---- -
    -- -- --- ------ -
      -- -------------- - ---- -
        --------------------
      - ---- -
        ---------------------
      -
    -
  -
  ------ ------------------ ------------- -------------------
-

该函数首先检查数组长度是否小于等于1,如果是则直接返回该数组。否则,随机选取一个元素作为“轴点”(pivot),然后遍历数组中的每个元素,并根据一定的概率将其放入左半部分或右半部分。最后,将左半部分、轴点和右半部分合并起来,得到一个打乱顺序的数组。

总结

本文介绍了两种常见的打乱数组元素顺序的方法:洗牌法和递归切分法。无论哪种方法,都可以很好地实现数组的随机操作。在实际开发中,可以根据具体情况选择合适的方法。

示例代码可在 GitHub Gist 中查看和下载。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/7959


猜你喜欢

  • [Podcast] [] The Future of RxJS 6 & 7 - Roadmapping Operators

    [Podcast] The Future of RxJS 6 & 7 - Roadmapping Operators Introduction RxJS is a popular librar...

    7 年前
  • Master the JavaScript Interview: What is a Promise?

    If you've been working with JavaScript for any length of time, you've likely encountered Promises. B...

    7 年前
  • javascript可选的链式调用可能到来了

    JavaScript可选的链式调用可能到来了 JavaScript是一种动态类型、面向对象的编程语言,广泛应用于Web前端开发中。随着ES6(ECMAScript 2015)规范的发布,JavaScr...

    7 年前
  • Weex: Review and Comparison with React Native

    Weex and React Native are two popular cross-platform frameworks for building mobile applications. Th...

    7 年前
  • 对运行时转的一次尝试

    运行时转译的一次尝试 随着前端技术的不断发展,越来越多的新特性被引入到 JavaScript 中。但是这些新特性并不是所有浏览器都支持的,这就导致了在开发过程中需要考虑兼容性问题。

    7 年前
  • 关于移动端开发中遇到的坑

    在移动端开发中,由于不同设备、浏览器的差异性以及用户体验的要求,经常会遇到各种问题和坑点。本文将介绍一些常见的移动端开发坑点,并提供解决方案和指导意义。 1. Retina屏幕下的图像模糊问题 Ret...

    7 年前
  • 使用 SVG 打造一个高质量的 ICON 系统

    使用 SVG 打造高质量 ICON 系统 介绍 ICON 是任何 Web 应用程序的重要组成部分。它们可以帮助用户轻松找到所需功能,增强品牌认知度,并使应用程序更加美观。

    7 年前
  • 基于对象的事件绑定

    在前端开发中,事件绑定是非常重要的一个概念。它使得我们可以在用户与页面进行交互时触发相应的动作,从而实现丰富的用户体验。本文将介绍基于对象的事件绑定,包括其原理、使用方法以及注意事项。

    7 年前
  • [官方][Safari Webkit - 支持新的 Storage Access API

    Safari WebKit - 支持新的 Storage Access API Safari WebKit 是苹果公司开发的 Web 渲染引擎,在最近的版本中增加了对新的 Storage Access...

    7 年前
  • Blotter.js - 快速实现各种字体动画效果

    Blotter.js 是一款用于创建高质量、炫酷的字体动画效果的 JavaScript 库。Blotter.js 提供了多种渲染效果和样式,可以轻松实现惊人的视觉效果,轻松实现各种创新性的设计。

    7 年前
  • 渐进式图片以及用户体验方面的影响

    在前端开发中,图像是网站和应用程序中不可或缺的一部分,但它们也可以对性能和用户体验产生负面影响。其中一个解决方案是使用渐进式图像。 什么是渐进式图像? 渐进式图像是指在加载过程中逐步显示的图像。

    7 年前
  • 随机方法总结

    前端随机方法总结 在前端开发中,经常需要使用到随机数方法,比如生成随机密码、随机颜色等。本文将介绍一些常用的前端随机方法,并探讨它们的实现方式、使用场景以及注意事项。

    7 年前
  • js正则字符串

    JavaScript 正则表达式与字符串操作 正则表达式是一种强大的工具,它能够帮助开发者处理和操作字符串。JavaScript 的正则表达式内置于语言中,因此可以方便地使用。

    7 年前
  • 一次记住js的6个正则方法

    一次记住JS的6个正则方法 在前端开发中,正则表达式是一个非常重要的工具。它可以用于验证用户输入、搜索和替换字符串等各种场景。本文将介绍JS中常用的6个正则方法,希望能够帮助你更好地掌握这个强大的工具...

    7 年前
  • 前端面试题目大全

    前端面试题目大全 前端开发是一个快速变化的领域,需要不断学习和掌握新技术。在面试中,经常会被问及各种前端知识。以下是一些常见的前端面试题目,包括深度和指导意义。 HTML 部分 1. 请解释一下 HT...

    7 年前
  • Java与Javascript的区别、联系及其问题

    Java和Javascript是两种不同的编程语言,尽管它们有些相似之处,但也有很多的差异。在前端开发中,对于这两种语言的理解和应用都非常重要,以下将详细介绍它们的区别、联系以及常见问题。

    7 年前
  • react-native 超方便好用toast组件支持ios、android

    React-Native 轻松实现跨平台 Toast 组件 在移动端开发中,Toast 作为一种轻量级的提示组件,在用户体验中扮演着非常重要的角色。而在 React-Native 技术栈中,我们可以使...

    7 年前
  • FE-Interview-questions(前端面试题/知识点)

    的title和alt有什么区别](#img%E7%9A%84title%E5%92%8Calt%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB) ...

    7 年前
  • 用一个hello world项目学习webpack

    Webpack是一款用于打包JavaScript应用程序的工具,它可以将多个JavaScript文件打包成单个文件。在本文中,我们将使用一个简单的hello world项目来学习Webpack。

    7 年前
  • 注释的骚操作

    在前端开发中,注释是非常重要的一部分,它可以帮助团队成员理解代码,并且更好地维护和修改项目。不过,除了基本的注释方法外,还有一些骚操作可以让你的注释更加优雅、高效。

    7 年前

相关推荐

    暂无文章