欢迎访问我的个人博客:http://www.xiaolongwu.cn

今天我们来看看实现随即排序的几种做法

方法一

思路为:遍历数组,每次循环都随机一个在数组长度范围内的数,并交换本次循环的位置和随机数位置上的元素

function randomSort1(arr){for (let i = 0, l = arr.length; i < l; i++) {let rc = parseInt(Math.random() * l );
// 让当前循环的数组元素和随机出来的数组元素交换位置const empty = arr[i];arr[i] = arr[rc];arr[rc] = empty;       }return arr;
}
// 例子
var arr1 = [1,2,3,4,5,6,7,8,9];
// 下面两次的结果肯定是不一样的;
console.log(randomSort1(arr1));
console.log(randomSort1(arr1));

方法二

思路:
1. 申明一个新的空数组,利用while循环,如果数组长度大于0,就继续循环;
2. 每次循环都随机一个在数组长度范围内的数,将随机数位置上的元素push到新数组里,
3. 并利用splice(对splice不太理解的同学可以看这里)截取出随机数位置上的元素,同时也修改了原始数组的长度;

function randomSort2(arr){var mixedArr = [];while(arr.length > 0){let rc = parseInt(Math.random() * arr.length );mixedArr.push(arr[rc]);arr.splice(rc,1);}return mixedArr;
}
// 例子
var arr1 = [1,2,3,4,5,6,7,8,9];console.log(randomSort2(arr1));

方法三

思路:利用传入sort排序中的比较函数,比较函数的规则如下:
1. 如果 compareFunction(a, b)的返回值 小于 0 ,那么 a 会被排列到 b 之前;
2. 如果 compareFunction(a, b)的返回值 等于 0 ,那么a 和 b 的相对位置不变;
3. 如果 compareFunction(a, b)的返回值 大于 0 ,那么b 会被排列到 a 之前;

 function randomSort3(arr){arr.sort(function(a,b){return Math.random() - 0.5;});return arr;
}
// 例子
var arr1 = [1,2,3,4,5,6,7,8,9];console.log(randomSort3(arr1));

如果不传比较函数,会按照字典顺序对元素进行排序,看下面例子

var array = [3, 2, 104, 8, 340, 540]
array.sort()
console.log(array) // [104, 2, 3, 340, 540, 8]

这几种方法就是我目前了解到的,如果您还有别的方案可以再下方留言或者和我联系,相互学习

我的个人博客:http://www.xiaolongwu.cn

如果您对我的博客内容有疑惑或质疑的地方,请在下方评论区留言,或邮件给我,共同学习进步。

邮箱:wuxiaolong802@163.com

js中的几种随机排序方案相关推荐

  1. js中getBoundingClientRect的作用及兼容方案

    js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...

  2. js中的4种函数调用模式:函数调用、方法调用、构造器调用、间接调用

    全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中的4种函数调用模式 javascript一共有4种调用模式:函数调用模式.方法调用模式.构造器调用模式和间接调用模式. ...

  3. js中的8种数据类型

    js中的数据类型 6种基本数据类型: Number (基本数据类型)(NaN) String Boolean Null (null) Undefined (undefined) Object (引用数 ...

  4. JS中的几种循环和跳出方式

    JS中的循环是大家很常用的,这里总结一下几种常用循环的跳出方式. 1.for循环 var arr = ['q','w','e','r','t']; for(var i=0, len = arr.len ...

  5. js中的两种定时器setTimeout()和setInterval()怎么用

    JS有两种定时器分别是setTimeout()和setInterval(),这两个区别就是setTimeout()是一次性的定时器,而setInterval()是循环的定时器. 定时器的精度 js中的 ...

  6. js 中的五种继承方法

    正式发布的ES6中已经封装实现了其他OO语言中的继承形式,Class Extends,这里主要记录js的原型继承和借用构造函数继承 一.原型链继承 function Super(){this.name ...

  7. js中的几种跨域方法

    js跨域指的是通过js在不同域之间进行数据传输或通讯,例如ajax通信技术,或者通过js获取页面中iframe的数据.只要有任意一个不同,则协议.域名.端口中有任意一个不同,则彼此成为不同的域. 请注 ...

  8. Vue.js中的8种组件间的通信方式;3个组件实例是前6种通信的实例,组件直接复制粘贴即可看到运行结果

    文章目录 一.$children / $parent 二.props / $emit 三.eventBus 四.ref 五.provide / reject 六.$attrs / $listeners ...

  9. 【knex】 knex.js中 orderBy多个字段排序

    Knex.js的官方文档中是这样示例的: knex('users').orderBy([{ column: 'email' }, { column: 'age', order: 'desc' } ]) ...

  10. JS中的12种循环遍历的方法

    1.for循环 JS常见的循环,常用于循环数组.字符串之类 let arr = [1, 2, 3]; for (let i = 0; i < arr.length; i++) {console. ...

最新文章

  1. 更改mysql最大连接数
  2. C++学习之路 | PTA乙级—— 1004 成绩排名 (20分)(精简)
  3. 添加、移除事件及相关处理函数各方法
  4. 移动端APP测试概要
  5. 如何使用EasyRecovery进行深度扫描和继续扫描
  6. TeleportUltra_1.65_PortableSoft离线浏览利器-扒网页神器
  7. 2022甘肃省安全员C证特种作业证考试题库及模拟考试
  8. 学习计算机语言入门必看
  9. php换脸,PS换脸术 蒙娜丽莎图片换脸教程
  10. 茴香豆的茴字有几种写法
  11. 做一个文字跟随鼠标java_JavaScript实现文字跟随鼠标特效
  12. 对于半圆形的点击区域该怎么做_我做了一个傻瓜式热力图生成工具
  13. HTML头部文档相关标记,html头部基本标记详解
  14. 毁三观:从 onSavedInstanceState 中取值竟为空?!
  15. Vue或uniapp使用luckysheet免费开发多人在线编辑Excel文档
  16. 【CG物理模拟系列】开篇:介绍(下)
  17. CSS 3.0实现泡泡特效
  18. SAP软件ERP系统简介
  19. Java架构师学习路线图
  20. 浅谈大根堆,小根堆,以及堆排序(python)实现

热门文章

  1. HttpModule 与 Globle.asax
  2. 电梯控制系统设计(PLC及组态)
  3. Debian分区工具partman
  4. Unity游戏资源逆向工具
  5. 省级面板数据(2003-2019)二十:道路长度、面积、用水、污水、废气、保护区等(stata或excel版本)
  6. 国际C语言混乱代码大赛 获奖作品
  7. vue项目引入阿里巴巴矢量图标库图标
  8. MxCAD云图DWG转PDF
  9. matlab九节点网络仿真问题,三机九节点电力系统仿真matlab
  10. 计算机跳过密码直接登录密码,win10免密码自动登录怎么设置_win10跳过密码直接登录电脑-win7之家...