建议11:增强数组排序的sort功能
sort方法不仅按字母顺序进行排序,还可以根据其他顺序执行操作.这时就必须为方法提供一个比较函数的参数,该函数要比较两个值,然后返回一个用于说明这两个值得相对顺序的数字.比较函数应该具有两个参数a和b,其返回值如下:
- 如果根据自定义评判标准,a小于b,在排序后的数组中a应该出现在b之前,就返回一个小于0的值
- 如果a等于b,就返回0
- 如果a大于b,就返回一个大于0的值
下面的示例中,将根据比较函数来比较数组中每个元素的大小,并按从小到大顺序排序
function f(a,b){
return (a-b)
}
var a = [4,3,5,6,7,3,6,8]
a.sort(f)
console.log(a); //[3, 3, 4, 5, 6, 6, 7, 8]
如果是从大到小,则让返回值取反就好
function f(a,b){
return -(a-b)
}
var a = [4,3,5,6,7,3,6,8]
a.sort(f)
console.log(a); //[8, 7, 6, 6, 5, 4, 3, 3]
(1) 根据奇偶性值排列数组
sort方法用法比较灵活,但更灵活的是对比较函数的设计.例如:要根据奇偶数顺序排列数组,只需要判断比较函数中两个参数是否为奇偶数,并决定排列顺序
function f(a,b){
var a = a%2
var b = b%2
if(a==0) return 1
if(b==0) return -1
}
var a = [3,1,2,4,5,7,6,8,0,9]
a.sort(f)
console.log(a); //[3, 1, 5, 7, 9, 0, 8, 6, 4, 2]
sort方法在调用比较函数时,将每个元素值传递给比较函数,如果元素值为偶数,则保留其位置不动,如果元素值为奇数,则调换参数a和b的显示顺序,从而实现数组中所有元素执行奇偶排序.
(2) 不区分大小写排序字符串
如果不希望区分字母大小,也就是说大写字母和小写字母按相同顺序排列
function f(a,b){
var a = a.toLowerCase;
var b= b.toLowerCase;
if(a<b){
return 1
}else{
return -1
}
}
var a = ['aB','Ab','Ba','bA']
a.sort(f)
console.log(a); // ["aB", "Ab", "Ba", "bA"]
(3) 把浮点数和整数分开排列
function f(a,b){
if(a>Math.floor(a)){
return 1
}
if(b>Math.floor(b)){
return -1
}
}
var a = [3.555,3,2.111,5,7,3]
a.sort(f)
console.log(a); //[3, 5, 7, 3, 2.111, 3.555]
建议11:增强数组排序的sort功能的更多相关文章
- 企业IT管理员IE11升级指南【1】—— Internet Explorer 11增强保护模式 (EPM) 介绍
企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...
- 增强 Jupyter Notebook的功能
增强 Jupyter Notebook的功能 Jupyter Notebook 是所有开发者共享工作的神器,它为共享 Notebooks 提供了一种便捷方式:结合文本.代码和图更快捷地将信息传达给受众 ...
- 自己实现简单的AOP(三) 实现增强四项基本功能
前面的两篇随笔,都是只是个铺垫,真正实现增强四项基本功能的重头戏,在本篇随笔中, 本文将通过AOP实现如下的四个基本功能: /// <para>1.自动管理数据库连接[可选]</pa ...
- Sort功能极强!
Sort功能极强! 可以排string: sort(a.begin(),a.end()); 普通数组 结合结构体 逆序 而且贼快
- 编写高质量代码改善C#程序的157个建议——建议11: 区别对待==和Equals
建议11: 区别对待==和Equals 在开始本建议之前,首先要明确概念“相等性”.CLR中将“相等性”分为两类:“值相等性”和“引用相等性”.如果用来比较的两个变量所包含的数值相等,那么将其定义为“ ...
- 分布式图数据库 Nebula RC2 发布:增强了 CSV Importer 功能
Nebula Graph 是开源的分布式图数据库,可应用于知识图谱.社交推荐.风控.IoT 等场景. 本次 RC2 主要新增 GO FROM ... REVERSELY 和 GROUP BY 等语句, ...
- 关闭 OSX 10.11 SIP (System Integrity Protection) 功能
关闭 OSX 10.11 SIP (System Integrity Protection) 功能 来源 https://cms.35g.tw/coding/%E9%97%9C%E9%96%89-os ...
- 调试错误,请回到请求来源地,重新发起请求。 错误代码 insufficient-isv-permissions 错误原因: ISV权限不足,建议在开发者中心检查对应功能是否已经添加
接人H5手机网站支付宝支付时,已经将表单发给页面了,支付宝响应调试错误,请回到请求来源地,重新发起请求.错误代码 insufficient-isv-permissions 错误原因: ISV权限不足, ...
- JS编程建议——11:慎重使用伪数组
建议11:慎重使用伪数组JavaScript没有真正的数组,因此typeof运算符不能辨别数组和对象.伪数组在JavaScript中有很高的易用性,程序员不用给它设置维度,而且永远不用担心产生越界错误 ...
随机推荐
- 从NIPS2014大会看机器学习新趋势
微软杰出科学家 John Platt 本文译自:Machine Learning Trends fromNIPS 2014 编者按:John Platt是微软的杰出科学家,也是微软在机器学习领域的领军 ...
- Warning: $HADOOP_HOME is deprecated. hadoop解决方法补充版
下面的解决方案我亲自试了没有问题:可行,但是对于初学者来说肯定会有一个疑问:这个.bash_profile文件到底在哪呢:其实很简单: 当前用户的.bash_profile在/home/用户/下,系统 ...
- Inventor 卸载工具,完美彻底卸载清除干净Inventor各种残留注册表和文件
一些同学安装Inventor出错了,也有时候想重新安装Inventor的时候会出现这种本电脑windows系统已安装Inventor,你要是不留意直接安装,只会安装Inventor的附件,Invent ...
- labview学习——生产者/消费者(数据)(事件)
其主要的模型: 主要从以下几个方面理解: 1.可重入性 正常的labview是多线程设计语言,而我们在执行VI时的规则是通过VI的命名来分别调用实现的. 打开VI的Highlight调试工具,可以看出 ...
- com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '2.34435678977654336E17' in column '3' is outside valid range for the datatype INTEGER.
### Error querying database. Cause: java.lang.reflect.UndeclaredThrowableException### The error may ...
- 吴裕雄--天生自然 R语言开发学习:广义线性模型
#----------------------------------------------# # R in Action (2nd ed): Chapter 13 # # Generalized ...
- 红杉资本的Dropbox上市,国内哪些产品会跟着受益?
每一个估值达到10亿美元以上的互联网.科技独角兽企业,都将上市当做"终极荣光".但事实上,上市只是这些独角兽企业开启全新时代的开端而已.很多气势汹汹且看似前景一片光明的独角兽 ...
- Numpy入门(三):Numpy概率模块和线性代数模块
Numpy中经常使用到的两个模块是概率模块和线性代数模块,random 和 linalg 两个模块. 概率模块 产生二项分布的随机数:np.random.binomial(n,p,size=-),其中 ...
- Twins:眼红红 - fancybot的博客
"我最初面红.现在双眼通红" TWINS 听听歌.小时候.听得最最最多的就是TWINS的了 跳过图片 跳过歌词 眼红红 Twins 仍然怀念他 一起去学结他 一对黑眼圈 回望中三暑 ...
- Python——1变量和数据类型(内含其他知识点链接)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...