js-2018-11-09 关于Array中的srot()方法和compare()方法
Array中的srot()方法
sort()方法是用来重排序的方法。在默认情况下,sort()方法按升序排列数组项----即最小的值位于最前面,最大的值排在最后面。
我们看看官方是怎么说的:
arrayObj.srot(sortFunction)
参数
arrayObj
必选项。任意Array对象
sortFunction
可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照ASCII字符串进行升序排列。
说明
sort()方法将Array对象进行适当的排序,在执行过程中并不会创建新的Array对象。
如果sort()方法里传入的是函数,那么数组就会根据传入的函数排列,该函数必须返回下列值之一:
- 如果所传递的第一个参数比第二个参数小,则返回负值。
- 如果第一个参数比第二个参数大,则返回正值。
- 如果两个参数相等,则返回0。
var values = [0, 1, 5, 10, 15];
values.sort(); //调用sort()方法
console.log(values); //0, 1, 10, 15, 5
如上,在字符串比较时 ”10” 位于 “5” 的前面,于是输出结果10 在5 的前面。sort()方法会调用每个数组项的toString()转型方法(即把要排序的内容转化为string),然后按照字符串的第一位(从右到左)的ASCII码先后顺序进行比较,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串。
所以说,sort()方法这种排序方式在很多情况下都不是最佳方案。因此sort()方法可以接收一个比较函数作为参数,以便避免上面这种结果。
/*compare函数*/
function compare(value1, value2) {
//return value1 - value2;
if(value1 < value2) {
return -1;
} else if(value1 > value2) {
return 1;
} else {
return 0;
}
} var values = [0, 1, 10, 15, 5];
values.sort(compare); //values调用sort()方法,然后传入并引用compare函数,然后返回compare的参数(负值,正值,0)。
console.log(values); //0, 1, 5, 10, 15
如上,比较函数compare接收数组values的两个参数,value1 < value2 则返回 -1;value1 > value2 则返回 1;反之则返回 0;
对于数值类型或者其valueOf()方法会返回数值类型的对象类型,也可以把比较函数compare简单化,如下
function compare(value1, value2){
return value2 - value1;
}
由于比较函数是通过返回一个小于零、等于零或大于零的值来影响排序结果,因此减法操作就可以适当处理所有这些情况。
小结
1. sort()方法单独引用并不稳定和严谨,所以sort()方法可以返回一个比较函数来作为参数。
2. 在sort()方法引用比较函数时,必须满足返回三个数值(负值,正值,零)。
3. 日常打卡(1/1)
js-2018-11-09 关于Array中的srot()方法和compare()方法的更多相关文章
- JavaScript -- Array中的push()方法和concat()方法介绍
Array => push()方法向数组的末尾添加一个或者多个元素,也就是说它会改变数组本身 concat() => concat()方法用于连接2个或者多个数组,但它的特殊之处在于,它会 ...
- js中的splice方法和slice方法简单总结
slice:是截取用的 splice:是做删除 插入 替换用的 slice(start,end): 参数: start:开始位置的索引 end:结束位置的索引(但不包含该索引位置的元素) 例如: va ...
- JS中的call()方法和apply()方法用法总结
原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...
- JS中的call()方法和apply()方法用法总结(挺好 转载下)
最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...
- Java8新特性(一)_interface中的static方法和default方法
什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...
- interface中定义default方法和static方法
interface的default方法和static方法 接口中可以定义static方法,可通过接口名称.方法名()调用,实现类不能继承static方法: 接口中可以定义default方法,defau ...
- TP框架中的A方法和R方法
ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法.ThinkPHP 内 ...
- Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍
在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...
- java 中的set方法和get方法的理解
get的意思是获取,set的意思是设置. get方法和set方法是实现类的封装访问的很好的工具. 当类中的变量设为private 时,他的意思就是说,只能通过自身和子类的访问,但是对于别的其他的类来说 ...
随机推荐
- Android:创建无标题栏的Activity
上图是一个带标题栏的Activity.有些时候我们希望能去除这个标题栏,做法如下: 1. 在res/values目录下面创建styles.xml.如果你已经有这个文件了,那么直接打开这个文件,添加如下 ...
- ioctl在socket中的一些用法及示例
原文: http://blog.chinaunix.net/uid-20692625-id-3172833.html ----------------------------------------- ...
- leetcode第一刷_Minimum Window Substring
好题.字符串.线性时间. 我认为第一次拿到这个题的人应该不会知道该怎么做吧,要么就是我太弱了..先搞清楚这个题要求的是什么.从一个长字符串中找一个字串,这个字串中的字符全然包括了另一个给定目标串中的字 ...
- 一条SQL语句求前面记录的平均值
有算法要求如下: For (i=1,i<=10,i++) { ta[i] = (t[1] + t[2] + ... + t[i]) / i; } 用一条SQL语句实现它: 分别用表变量 @ta ...
- Android 重写onBackPressed()方法 遇到的问题
1.resultCode的值一直为0 问题描述:AActivity调用startActivityForResult()方法,启动BActivity,然后在BActivity的onBackPressed ...
- rk3288对于parameter参数文件的解析处理【转】
本文转载自:http://blog.csdn.net/groundhappy/article/details/56479694 rk3288有一个parameter文件. 类似于 FIRMWARE_V ...
- hdoj--1220--Cube(数学推导)
Cube Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- [POJ 2536] Gopher ||
[题目链接] http://poj.org/problem?id=2536 [算法] 匈牙利算法解二分图最大匹配 [代码] #include <algorithm> #include &l ...
- [AtCoder3954]Painting Machines
https://www.zybuluo.com/ysner/note/1230961 题面 有\(n\)个物品和\(n-1\)台机器,第\(i\)台机器会为第\(i\)和\(i+1\)个物品染色.设有 ...
- PCB 线路板人生
由此开端,增加PCB人生分类栏,后续在此分享PCB 非工作方面所思所想,由于文笔不好,请指正.