数组的重排序方法reverse()和sort()
js数组中存在两个可以直接用来重排序的方法:reverse()和sort()。
reverse()方法比较简单,直接反转数组项的顺序:
var arr = [1, 3, 2, 4, 5];
arr.reverse();
console.log(arr); //[5, 4, 3, 2, 1];
reverse()比较经典的用法,反转字符串:
var str= "Hello World";
var result = str.split("").reverse().join("");
console.log(result); //dlroW olleH;
sort()方法则更加灵活一些,可以按升序或者降序排列数组。
github上v8/array.js源码 708行-738行:
function InnerArraySort(array, length, comparefn) {
// In-place QuickSort algorithm.
// For short (length <= 10) arrays, insertion sort is used for efficiency.
if (!IS_CALLABLE(comparefn)) {
comparefn = function (x, y) {
if (x === y) return 0;
if (%_IsSmi(x) && %_IsSmi(y)) {
return %SmiLexicographicCompare(x, y);
}
x = TO_STRING(x);
y = TO_STRING(y);
if (x == y) return 0;
else return x < y ? -1 : 1;
};
}
function InsertionSort(a, from, to) {
for (var i = from + 1; i < to; i++) {
var element = a[i];
for (var j = i - 1; j >= from; j--) {
var tmp = a[j];
var order = comparefn(tmp, element);
if (order > 0) {
a[j + 1] = tmp;
} else {
break;
}
}
a[j + 1] = element;
};
从源码可以看出,默认情况下,comparefn会将数组每一项转换成String类型,然后按照ASCII码顺序比较大小,并以升序排列:
var arr = [0, 1, 5, 10, 15];
arr.sort()
console.log(arr); //[0, 1, ,10, 15, 5];
值得注意的是,即使数组中的每一项都是Number类型,也会被转换成String类型比较大小,这显然不是我们要的效果,因此可以通过给sort()方法传入一个比较函数,来实现按数字大小排序。比较函数接收两个参数,为数组相邻的两个项。如果第一个参数应该位于第二个参数之前则应返回一个负数,两个参数相等则返回0,第一个参数应该位于第二个参数之后则返回一个正数。例如,如果数组需要按升序排列,则可以使用以下比较函数:
function comparefn(v1, v2) {
if(v1 < v2) {
return -1;
} else if (v1 > v2) {
return 1;
} else {
return 0;
}
}
由于比较函数通过返回一个小于零、等于零或大于零的值来影响排序结果,因此对于数值类型或者其valueOf()方法会返回数值类型的对象类型,使用减法操作就可以适当地处理所有这些情况。
function compar(value1, value2) {
return value2 - value1
}
数组的重排序方法reverse()和sort()的更多相关文章
- Python 列表排序方法reverse、sort、sorted操作方法
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- Python 列表排序方法reverse、sort、sorted详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- python 列表排序方法reverse、sort、sorted基础篇
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- python列表排序方法reverse、sort、sorted
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- Python列表排序方法reverse、sort、sorted详解
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)
1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法. 2.有时候需要传递大量可选参数的情形时,一 ...
- JS中数组重排序方法
在数组中有两个可以用来直接排序的方法,分别是reverse()和sort().下面通过本文给大家详细介绍,对js数组重排序相关知识感兴趣的朋友一起看看吧 1.数组中已存在两个可直接用来重排序的方法:r ...
- Javascript中数组重排序方法详解
在数组中有两个可以用来直接排序的方法,分别是reverse()和sort().下面通过本文给大家详细介绍,对js 数组重排序相关知识感兴趣的朋友一起看看吧. 1.数组中已存在两个可直接用来重排序的方法 ...
- Javascript中数组查重的方法总结大全
数组查重:简单点说,就是找出数组中重复的元素然后去除,最后得到一个没有重复元素的数组. // 方法一思路: 1.构建一个新的数组,用于存放结果. 2.for循环中每次从数组取出一个 ...
随机推荐
- Idea Maven 建本地仓库-导入本地JAR包
需求 IDEA 很方便集成了Maven,但是也有相应的问题,比如使用Maven仓没有包的时候不太方便,这时我们需要建立自已的本地仓库来实现 实现 找到Idea的安装目录下面的Maven,我的在 C:\ ...
- socket bind详解
http://www.cnblogs.com/nightwatcher/archive/2011/07/03/2096717.html 在最开始接触bind的时候,只是在写基于tcp的server端的 ...
- jquery练习之瀑布流
最近有空简单学习了下瀑布流,写完后想和大家一起分享下,但我知道我的代码有很多缺陷不足,希望多多包涵.(纯属兴趣非专业学习人士) 众所周知,瀑布流大概分为2种,一种是浮动式的瀑布流,一种是定位式的瀑布流 ...
- js实现文本框溢出文字用省略号(...)表示
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Win7+CentOS双系统(一)
注意:1.由于涉及到对硬盘操作,请妥善备份数据,避免损失. 2.为了达到每个步骤都有图片覆盖,我使用了虚拟机来进行测试,不过请大家放心,我已经在自己的物理机上成功实现了. 3.我的步骤是绝对正确和缺一 ...
- ios url网址相关问题解说
问题1:ios网址中存在汉字的情况,需要GB_18030_2000编码方法如下: // 汉字转编码 + (NSString *)changeChineseWithEncodingGB_18030_20 ...
- 基于51单片机IIC通信的AT24C02学习笔记
引言 最近在学习几种串行通信协议,感觉收获很多,这篇文章是学习IIC总线协议的第一篇文章,以后还会再写一篇关于PCF8591 IIC通信的ADDA转换芯片的文章. 关于IIC总线 IIC 即Inter ...
- nginx源码编译问题
[root@localhost nginx-1.7.4]# ./configure checking for OS + Linux 2.6.32-431.el6.x86_64 x86_64 check ...
- redis object 对象系统
redis object对象系统 概述 redis 当中, sds字符串, adlist双向链表, dict字典, ziplist压缩链表, intset整数集合等均为底层数据结构 redis 并没有 ...
- HDU 2846 Trie查询
给出若干模式串,再给出若干询问串,求每个询问串作为多少个模式串的子串出现. 如果一个串是另一个串的子串,则一定是另一个串某个前缀的后缀或者某个后缀的前缀.根据字典树的性质,将模式串的每一个后缀插入字典 ...