js中的几种随机排序方案
欢迎访问我的个人博客: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中的几种随机排序方案相关推荐
- js中getBoundingClientRect的作用及兼容方案
js中getBoundingClientRect的作用及兼容方案 1.getBoundingClientRect的作用 getBoundingClientRect用于获取某个html元素相对于视窗的位 ...
- js中的4种函数调用模式:函数调用、方法调用、构造器调用、间接调用
全栈工程师开发手册 (作者:栾鹏) js系列教程4-函数.函数参数教程全解 js中的4种函数调用模式 javascript一共有4种调用模式:函数调用模式.方法调用模式.构造器调用模式和间接调用模式. ...
- js中的8种数据类型
js中的数据类型 6种基本数据类型: Number (基本数据类型)(NaN) String Boolean Null (null) Undefined (undefined) Object (引用数 ...
- JS中的几种循环和跳出方式
JS中的循环是大家很常用的,这里总结一下几种常用循环的跳出方式. 1.for循环 var arr = ['q','w','e','r','t']; for(var i=0, len = arr.len ...
- js中的两种定时器setTimeout()和setInterval()怎么用
JS有两种定时器分别是setTimeout()和setInterval(),这两个区别就是setTimeout()是一次性的定时器,而setInterval()是循环的定时器. 定时器的精度 js中的 ...
- js 中的五种继承方法
正式发布的ES6中已经封装实现了其他OO语言中的继承形式,Class Extends,这里主要记录js的原型继承和借用构造函数继承 一.原型链继承 function Super(){this.name ...
- js中的几种跨域方法
js跨域指的是通过js在不同域之间进行数据传输或通讯,例如ajax通信技术,或者通过js获取页面中iframe的数据.只要有任意一个不同,则协议.域名.端口中有任意一个不同,则彼此成为不同的域. 请注 ...
- Vue.js中的8种组件间的通信方式;3个组件实例是前6种通信的实例,组件直接复制粘贴即可看到运行结果
文章目录 一.$children / $parent 二.props / $emit 三.eventBus 四.ref 五.provide / reject 六.$attrs / $listeners ...
- 【knex】 knex.js中 orderBy多个字段排序
Knex.js的官方文档中是这样示例的: knex('users').orderBy([{ column: 'email' }, { column: 'age', order: 'desc' } ]) ...
- JS中的12种循环遍历的方法
1.for循环 JS常见的循环,常用于循环数组.字符串之类 let arr = [1, 2, 3]; for (let i = 0; i < arr.length; i++) {console. ...
最新文章
- 更改mysql最大连接数
- C++学习之路 | PTA乙级—— 1004 成绩排名 (20分)(精简)
- 添加、移除事件及相关处理函数各方法
- 移动端APP测试概要
- 如何使用EasyRecovery进行深度扫描和继续扫描
- TeleportUltra_1.65_PortableSoft离线浏览利器-扒网页神器
- 2022甘肃省安全员C证特种作业证考试题库及模拟考试
- 学习计算机语言入门必看
- php换脸,PS换脸术 蒙娜丽莎图片换脸教程
- 茴香豆的茴字有几种写法
- 做一个文字跟随鼠标java_JavaScript实现文字跟随鼠标特效
- 对于半圆形的点击区域该怎么做_我做了一个傻瓜式热力图生成工具
- HTML头部文档相关标记,html头部基本标记详解
- 毁三观:从 onSavedInstanceState 中取值竟为空?!
- Vue或uniapp使用luckysheet免费开发多人在线编辑Excel文档
- 【CG物理模拟系列】开篇:介绍(下)
- CSS 3.0实现泡泡特效
- SAP软件ERP系统简介
- Java架构师学习路线图
- 浅谈大根堆,小根堆,以及堆排序(python)实现
热门文章
- HttpModule 与 Globle.asax
- 电梯控制系统设计(PLC及组态)
- Debian分区工具partman
- Unity游戏资源逆向工具
- 省级面板数据(2003-2019)二十:道路长度、面积、用水、污水、废气、保护区等(stata或excel版本)
- 国际C语言混乱代码大赛 获奖作品
- vue项目引入阿里巴巴矢量图标库图标
- MxCAD云图DWG转PDF
- matlab九节点网络仿真问题,三机九节点电力系统仿真matlab
- 计算机跳过密码直接登录密码,win10免密码自动登录怎么设置_win10跳过密码直接登录电脑-win7之家...