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()方法的更多相关文章

  1. JavaScript -- Array中的push()方法和concat()方法介绍

    Array => push()方法向数组的末尾添加一个或者多个元素,也就是说它会改变数组本身 concat() => concat()方法用于连接2个或者多个数组,但它的特殊之处在于,它会 ...

  2. js中的splice方法和slice方法简单总结

    slice:是截取用的 splice:是做删除 插入 替换用的 slice(start,end): 参数: start:开始位置的索引 end:结束位置的索引(但不包含该索引位置的元素) 例如: va ...

  3. JS中的call()方法和apply()方法用法总结

    原文引自:https://blog.csdn.net/ganyingxie123456/article/details/70855586 最近又遇到了JacvaScript中的call()方法和app ...

  4. JS中的call()方法和apply()方法用法总结(挺好 转载下)

    最近又遇到了JacvaScript中的call()方法和apply()方法,而在某些时候这两个方法还确实是十分重要的,那么就让我总结这两个方法的使用和区别吧. 1. 每个函数都包含两个非继承而来的方法 ...

  5. Java8新特性(一)_interface中的static方法和default方法

    什么要单独写个Java8新特性,一个原因是我目前所在的公司用的是jdk8,并且框架中用了大量的Java8的新特性,如上篇文章写到的stream方法进行过滤map集合.stream方法就是接口Colle ...

  6. interface中定义default方法和static方法

    interface的default方法和static方法 接口中可以定义static方法,可通过接口名称.方法名()调用,实现类不能继承static方法: 接口中可以定义default方法,defau ...

  7. TP框架中的A方法和R方法

    ThinkPHP 跨模块调用操作方法(A方法与R方法) 跨模块调用操作方法 前面说了可以使用 $this 来调用当前模块内的方法,但实际情况中还经常会在当前模块调用其他模块的方法.ThinkPHP 内 ...

  8. Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍

    在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...

  9. java 中的set方法和get方法的理解

    get的意思是获取,set的意思是设置. get方法和set方法是实现类的封装访问的很好的工具. 当类中的变量设为private 时,他的意思就是说,只能通过自身和子类的访问,但是对于别的其他的类来说 ...

随机推荐

  1. java 调用 库文件错误查找方法

    第一步首先找到 backtrace:keyword,然后找到都应的库文件 出错的地方 pc 0000088b  /system/lib/libNDK_04.so (SayHello+98). 08-1 ...

  2. Gevent的协程实现原理

    之前之所以看greenlet的代码实现,主要就是想要看看gevent库的实现代码. .. 然后知道了gevent的协程是基于greenlet来实现的...所以就又先去看了看greenlet的实现... ...

  3. 01背包--小P寻宝记——粗心的基友

    题目描写叙述 这对好基友他们在经历无数的艰难险阻后.最终找到了宝藏.无奈的是这一对好基友居然是一样的粗心,又忘记了带一个大一点的包包,可惜啊..选择又出现了啊.. 已知包的体积是v,每种宝贝仅仅有一种 ...

  4. P4135 作诗——分块

    题目:https://www.luogu.org/problemnew/show/P4135 分块大法: 块之间记录答案,每一块记录次数前缀和: 注意每次把桶中需要用到位置赋值就好了: 为什么加了特判 ...

  5. Coursera Algorithms week2 基础排序 练习测验: Permutation

    题目原文: Given two integer arrays of size n , design a subquadratic algorithm to determine whether one ...

  6. Django day15 (一) cbv装饰器 , 中间件

    一: 装饰器 二: 中间件

  7. 显示程序输出并复制到文件(tee 命令)

    Linux tee命令用于读取标准输入的数据,并将其内容输出成文件. tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件. 语法 tee [-ai][--help][--v ...

  8. strcpy自实现

    为了避免strcpy源串覆盖问题(P220),自实现strcpy. #include <stdio.h> #include <string.h> #include <as ...

  9. 【Arduino】LCD 1602 转接板 的默认接线

    原来的1602屏需要7个IO口才能驱动起来LCD 1602转接板可以帮你省5个IO口. 在Arduino中,LCD 1602 转接板可以使用函数库LiquidCrystal_I2C1602: 该函数的 ...

  10. for 循环练习题

    X3 * 6528 = 3X * 8256X为一个数字 填入一个数字 使等式成立 for (var x=1;x<=9&&x>0;x++) { if ((x*10+3)*65 ...