写php的时候 有个shuffle  函数很爽很好用,但是js要实现同样算法的时候发现没有现成函数,在网上看了大量的例子,觉得不靠谱所以,自己写了一个,其实非常简单,以下是实现代码

var shuffle = function (arrBox) {

arrBox = typeof arrBox === "string" ? arrBox.split("") : arrBox;

//实现一个洗牌算法

var shuffleBox = []

var len = arrBox.length;

for (i = 0; i < len; i++) {

var boxIndex = Math.floor(Math.random() * arrBox.length);

shuffleBox.push(arrBox[boxIndex].valueOf());

arrBox.splice(boxIndex, 1);

}

return shuffleBox;

}

var data = new Arra

示例

shuffle("abcdefghijklmnuvwxyz".split(""));

//结果显示

["g", "u", "x", "k", "y", "f", "v", "l", "j", "n", "b", "z", "w", "d", "c", "e", "a", "h", "i", "m"]

shuffle("abcdefghijklmnuvwxyz".split(""));

//结果显示

["a", "j", "m", "f", "g", "h", "c", "l", "v", "x", "w", "u", "k", "d", "e", "b", "n", "y", "z", "i"]

说明:有的朋友可能觉得我的参数并不是数组,其实是这样的 在console中执行:

"abcdefghijklmnuvwxyz".split("")

//输出

["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "u", "v", "w", "x", "y", "z"]

还有一个随机字符串的算法

randStr = (randLen, split, toUpper, str) => {

let shuffle = function (arrBox) {

arrBox = typeof arrBox === "string" ? arrBox.split("") : arrBox;

let shuffleBox = []

let len = arrBox.length;

for (let i = 0; i < len; i++) {

let boxIndex = Math.floor(Math.random() * arrBox.length);

shuffleBox.push(arrBox[boxIndex].valueOf());

arrBox.splice(boxIndex, 1);

}

return shuffleBox;

}

str = str || "abcdefghigklmnopkrstuvwxyz";

randLen=randLen||3;

randLen = randLen > str.length - 1 ? str.length - 1 : randLen;

let randKey = [

(new Date().getTime()).toString(32),

shuffle(str).splice(Math.floor(Math.random() * (str.length - randLen - 1)), randLen).join("")

];

let res = randKey.join(split || "");

return toUpper ? res.toUpperCase() : res;//生成一个随机不重复key

}

shuffle洗牌算法java_js打乱一个数组 的 洗牌(shuffle )算法相关推荐

  1. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

    Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...

  2. 算法12--topK求一个数组中第k大的数

    求一个数组中第k大的值 解法一: 建立一个k个元素的最大堆,首先将数组中前k个元素放入堆中,此时堆顶元素为第k大的元素,后面继续遍历数组,比较堆顶元素与数组中元素值,当数组中元素小于堆顶元素时,将堆顶 ...

  3. 怎样将树的中序遍历的数输入到一个数组中_数据结构与算法-二叉查找树平衡(DSW)...

    上一节探讨了二叉查找树的基本操作,二叉查找树的查找效率在理想状态下是O(lgn),使用该树进行查找总是比链表快得多.但是,该论点并不总是正确,因为查找效率和二叉树的形状息息相关.就像这样: 图1-1给 ...

  4. JS 如何打乱一个数组【生成无序数组】

    解决办法:只需要在sort()中,返回随机正负数即可. var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; //生成一个随机正负数 //排序 arr.sort(() => ...

  5. 数据结构与算法 pdf_整理一个月完成的数据结构与算法PDF和测试代码免费拿

    点击上方「10分钟编程」关注我呦 让我们每天「博学」一点点 数据结构与算法 作为一名2021届的学生,今年7月份就要面临秋招了,那么对于应届生来说,要想脱颖而出,笔试就显得太重要了,算法题是笔试环节的 ...

  6. MATLAB中定义数组序列,matlab怎么定义一个数组

    A=[]; n=input('n=');%数组的长度 for i=1:n fprintf('a%.0f=',i); x=input('');%分别输入各个数的值 A=[A,x]; end A 就可以得 ...

  7. 数组(一维数组、多维数组/二维数组)和简单排序算法

    提示:数组是线性数据结构中最为基础,最为典型的一种顺序型结构. 它用一组连续的内存空间 ,来存储一组具有相同类型的数据. 与变量相比,变量是一种单一的数据存储方式,而数组是用于存储一连串的一组数据. ...

  8. C++二个数组求交集的实现算法(附完整源码)

    C++二个数组求交集的实现算法 C++二个数组求交集的实现算法完整源码(实现,main函数测试) C++二个数组求交集的实现算法完整源码(实现,main函数测试) #include <iostr ...

  9. 无人车路径规划算法---(4)基于搜索的路径规划算法 II(贪心/Astar)

    上篇博客中介绍了一些基本的图搜索算法,其中也重点介绍了基于势场来实现的Dijkstra算法.本篇博客将介绍关于Heuristic Function的图搜索算法 开源了一个结合Dijkstra,Gree ...

最新文章

  1. 子元素绝对定位absolute后,自动撑开宽度
  2. AndroidStudio3.4.2 gradle5.1.1 apt注解解释器不执行
  3. leetcode算法题--环形链表 II★
  4. [源码和文档分享]基于FFMEPEG-MATLAB和C#-SQL SERVER构建的手机录音数据库及特征分析...
  5. su一键封面插件_插件分享丨一键制作SU爆炸分析图插件分享
  6. Metasploit从文件中读取目标地址
  7. 使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
  8. SpringCloud 从菜鸟到大牛之五 统一配置中心 Spring Cloud Config
  9. 闪光灯slave是什么意思_闪光灯实战讲解 | 室内光线+闪光灯使用配合=完美光效...
  10. GdiPlus[29]: IGPPen: 虚线样式
  11. 阶段3 2.Spring_08.面向切面编程 AOP_7 通用化切入点表达式
  12. 神经网络中常用的误差平方和损失函数是什么
  13. 终极文件/文件夹隐藏方案大全
  14. 原生的APP、小程序(微信小程序、支付宝小程序、头条小程序、百度小程序.等等)、H5 的优势与劣势分析有那些?
  15. 关于局域网的一点个人理解及如何建立一个局域网的步骤
  16. Android9.0源代码中替换默认静态壁纸
  17. windy网站数据分析
  18. 家用计算机做raid 2018,让电脑速度翻倍的方法,手把手教你组建RAID!
  19. html 实现excel表格分页打印,excel分页-用了这么多年Excel才知道,按下这个键,一张纸便可打印全部内容...
  20. 益智拼图APP隐私政策

热门文章

  1. Python的闭包的后期绑定问题
  2. 透传模式(透明传输SeriaNet)详解
  3. jquery出现“为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件。请单击这里获取选项...”的解决办法
  4. 强化学习《基于策略价值 - Adventage Actor-Critic》
  5. 漫步线性代数十七——正交基和格拉姆-施密特正交化(上)
  6. python 时间_Python-基础-时间日期处理小结
  7. pytorch forward_pytorch的C++ extension写法
  8. Matlab--view函数详解
  9. python ftp服务器限速_python实现ftp服务器
  10. Oracle PL/SQL入门