js数组排序和打乱
js数组根据不同的业务需求,会要求数组有序或者无序,记录一下流传较广,通用性较强的排序和乱序方法。
数组排序:
arr.sort(function(a,b){//从小到大
return a-b;【return b-a;//从大到小】
});
乱序数组:
arr.sort(function(a,b){//一般随机
return Math.random() - 0.5;
});
先看用到的sort(),sort()方法会调用每个数组项的 toString() 转型方法,原理是基于字符串(字符编码)的比较排序。应用方式:arrayObject.sort(sortby)【sortby:排序方式,函数】,返回原数组的引用,不生成副本。
排序函数的返回值决定位置:
若 sortby(a, b) < 0 ,return [a,b];
若 sortby(a, b) = 0 , return [a,b] or [b,a];
若 sortby(a, b) > 0 , return [b,a];
关于数组打乱方法,在网上看到一个更搞笑的处理方法,Fisher–Yates shuffle 洗牌算法
【https://gaohaoyang.github.io/2016/10/16/shuffle-algorithm/,详细说明的地址】
if (!Array.prototype.shuffle) {
Array.prototype.shuffle = function() {
for(var i = this.length-1;i>=0;i--){
var index = Math.floor(Math.random()*(i+1));//重点就是随机下标
var arrItem = this[index];
this[index] = this[i];
this[i] = arrItem;
}
return this;
};
}
arr.shuffle();
还有一种不太友好的写法
if (!Array.prototype.shuffle) {
Array.prototype.shuffle = function() {
for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j] = x);
return this;
};
}
arr.shuffle();
转载于:https://juejin.im/post/5b45d663518825196b01c7f6
js数组排序和打乱的更多相关文章
- js数组排序,支持正反排序以及多维度排序
工作中遇到js数组排序问题,数组中存储的都是对象,于是就百度了下,利用别人的代码进行修改,最终完成可以倒序.反序,可以进行多维度排序的功能源码如下: /** * js数组排序 支持数字和字符串 * @ ...
- js数组排序 reverse()和sort()方法的使用
WEB前端|js数组排序reverse()和sort()方法的使用,数组中已经存在两个可以直接用来重排序的方法:reverse()和sort(). reverse()方法会对反转数组项的顺序. var ...
- JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
本文实例总结了JS数组排序技巧.分享给大家供大家参考,具体如下: 1.冒泡排序 var temp = 0; for (var i = 0; i < array.length; i++) { fo ...
- Js数组排序函数sort()
JS实现多维数组和对象数组排序,用的其实就是原生sort()函数,语法为:arrayObject.sort(sortby)(sortby 可选.规定排序顺序.必须是函数.) 返回值为对数组的引用:请注 ...
- Js数组排序函数:sort()
原文链接:https://blog.csdn.net/qq_37936542/article/details/78979521 js原生的 sort() 排序函数使用起来很方便 语法:arrayObj ...
- js 数组排序和算法排序
1.算法排序 a.插入排序 var arr = [23,34,3,4,23,44,333,444]; var arrShow = (function insertionSort(array){ if( ...
- js数组排序
在JS中,sort方法可用于数组的排序:先来看一个例子: var arr = [1, 2, 3, 5, 7, 78, 8, 89]; arr.sort(); console.log(arr); // ...
- js数组操作-打乱数组
<style> html, body { margin: 0; padding: 0;} div span { display: inline-block; width: 25px; he ...
- js数组排序实用方法集锦
前言: 据说程序员三个月就能忘记自己写的代码,所以最好是在有空的时候及时做些总结,记录下来,这样后边遇到类似问题的话,就可以直接先查看自己的博客了.写技术博客,对自己是一种总结,对别人,是一种参考. ...
随机推荐
- PTA数据结构与算法题目集(中文) 7-23
PTA数据结构与算法题目集(中文) 7-23 7-23 还原二叉树 (25 分) 给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度. 输入格式: 输入首先给出正整数N(≤50) ...
- Windows10操作技巧系列——删除最常用,最常访问,快速访问记录
Win10除了有传统意义上的,网络历史记录外,还包含了两种本地文件浏览记录,分别是资源管理器中的“快速访问”记录,和开始菜单以及任务栏中的“最常用”“最近”“最常访问”等“最记录”. 资源管理器中的“ ...
- 响应式web设计(Responsive web design)
在全面进入互联网时代后,随着各种移动设备的普及,移动互联网更加受到大众的青睐.由于移动互联网的使用量远远超出了传统互联网的使用量,移动设备也正在逐渐超越桌面设备.因为用户在移动设备上的使用习惯不同,U ...
- String 对象-->indexOf() 方法
1.定义和用法 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,即下标. 如果没有找到匹配的字符串则返回 -1. 语法: string.indexOf(searchvalue ...
- Maven版本不合适导致出现的问题如下,换个老版本就好了
2019-09-30 11:56:24,555 [ 597097] ERROR - #org.jetbrains.idea.maven - IntelliJ IDEA 2018.3.5 Build # ...
- JAVA—SQL注入
之前看到的一道java面试题,Statement与PreparedStatement的区别,什么是SQL注入,如何防止SQL注入 前面部分比较好回答 1.PreparedStatement支持动态设置 ...
- Python logging日志打印
1.logging常用函数Logger.setLevel():设置日志级别Logger.addHandler()和Logger.removeHandler():添加和删除一个handlerLogger ...
- 阿里Canal框架数据库同步-实战教程
一.Canal简介: canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 二.背景介绍: ...
- 068.Python框架Django之DRF视图集使用
一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...
- 如何可视化深度学习网络中Attention层
前言 在训练深度学习模型时,常想一窥网络结构中的attention层权重分布,观察序列输入的哪些词或者词组合是网络比较care的.在小论文中主要研究了关于词性POS对输入序列的注意力机制.同时对比实验 ...