JavaScript sort数组排序方法和自我实现排序方法小结

 前言

针对一个数组进行排序,一个很常见的需求.尤其在后端.当然,前端也是有这个需求的.

当然,数组排序,是有现成的方法的.就是sort()方法.

我们先开看下这个.

标准答案,sort方法

var arr = [45,98,67,57,85,6,58,83,48,18];
console.log('原数组');
console.log(arr);
console.log('sort方法从小到大排序');
console.log(arr.sort(function(a,b){return a-b}));
console.log('sort方法从大到小排序');
console.log(arr.sort(function(a,b){return b-a}));

运行结果如下:

这里需要注意的是,sort默认是按照字母顺序来进行排序的.因此,我们在排列数字的时候,需要一个自定义函数.

如上面的代码

function(a,b){return a-b}

这就是一个从小到大的排序函数.看上去好简单的样子,但是我不理解,所以,我根据我的想法,来实现排序吧~

我的答案,for方法排序

var arr = [45,98,67,57,85,6,58,83,48,18];
console.log('原数组');
console.log(arr);
console.log('for方法从小到大排序');
console.log(arrSortMinToMax(arr));
console.log('for方法从大到小排序');
console.log(arrSortMaxToMin(arr));
// 找数组中最小的值
function arrMinNum(arr){
var minNum = Infinity, index = -1;
for (var i = 0; i < arr.length; i++) {
if (arr[i]<minNum) {
minNum = arr[i];
index = i;
}
};
return {"minNum":minNum,"index":index};
}
// 返回数组从小到大排序结果
function arrSortMinToMax(arr){
var arrNew = [];
var arrOld = arr.concat();
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMinNum(arrOld).minNum);
arrOld.splice(arrMinNum(arrOld).index,1)
};
return (arrNew);
}
// 找数组中最大的值
function arrMaxNum(arr){
var maxNum = -Infinity, index = -1;
for (var i = 0; i < arr.length; i++) {
if (arr[i]>maxNum) {
maxNum = arr[i];
index = i;
}
};
return {"maxNum":maxNum,"index":index};
}
// 返回数组从大到小排序结果
function arrSortMaxToMin(arr){
var arrNew = [];
var arrOld = arr.slice(0);
for (var i = 0; i < arr.length; i++) {
arrNew.push(arrMaxNum(arrOld).maxNum);
arrOld.splice(arrMaxNum(arrOld).index,1);
};
console.log(arr)
return (arrNew);
}

运行结果如下图所示

我的方法中的知识点

1.当一个函数需要返回多条数据的时候,使用json对象格式比较方便.如上面的return {"minNum":minNum,"index":index};

2.如果使用 var arrOld = arr 这种方法来复制一个数组,并且,对arrOld进行操作的话,是会影响到arr这个原数组的.因为javascript分原始类型与引用类型(与java、c#类似)。Array是引用类型。arrOld得到的是引用,所以对arrOld的修改会影响到arr

复制数组的方法(一)var arrOld = arr.concat(); ,原理:concat()函数是用于拼接多个数组的函数,这种写法相当于拼接自己.也就是复制了.

复制数组的方法(二)var arrOld = arr.slice(0) , 原理:slice()函数是一个截取数组的函数,设置值为0,则是全部截取,相当于复制了.

3.splice()方法用于插入、删除或替换数组的元素。这里是使用了其删除数组中指定位置的特性.

4.我的方法和sort方法的差异.

我的方法没有修改原数组,而sort是在原数组的基础上进行的修改.
我的方法返回的是一个新数组,原数组并没有消失或者改变.(好像和上面一句是一个意思….)

5.排序是编程中非常非常基础并且非常非常重要的知识点.sort排序在执行大量数据的情况下,效率还是比较低的.当然,我的方法的效率也是很低的.

本文转载于:http://blog.csdn.net/fungleo/article/details/51555590

以上所述是小编给大家介绍的JavaScript sort数组排序方法和自我实现排序方法小结的全部内容,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的,在此也非常感谢大家对我们网站的支持。

(0)

相关推荐

  • Js数组排序函数sort()介绍

    JavaScript实现多维数组.对象数组排序,其实用的就是原生的sort()方法,用于对数组的元素进行排序. sort() 方法用于对数组的元素进行排序.语法如下: arrayObject.sort(sortby) 返回值为对数组的引用.请注意,数组在原数组上进行排序,不生成副本. 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序.要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较. 如果想按照其他标准进行排序,

  • JS中sort函数排序用法实例分析

    本文实例讲述了JS中sort函数排序用法.分享给大家供大家参考,具体如下: 最近遇到了一个面试题目,关于排序的问题,为了完善自己的知识点,这里就写一下学习笔记 <html> <head> <TITLE>class_obj_js_class</TITLE> <script language=javaScript> //sort()方法默认是按照ASCII码大小排序,看下面两个例子 function sortDemo(){ var a, l; //

  • 模拟javascript中的sort排序(简单实例)

    一.javascript中sort对数据进行排序的原理 sort() 方法对数组的元素做原地的排序,并返回这个数组. sort 可能不是稳定的.默认按照字符串的Unicode码位点排序; 语法:arr.sort([compareFunction]) 参数 compareFunction 可选.用来指定按某种顺序进行排列的函数.如果省略,元素按照转换为的字符串的诸个字符的Unicode位点进行排序. 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前: 如

  • javascript中sort排序实例详解

    代码如下所示: var arr = [5,32,28,66,2,15,3]; arr.sort(function(a1,a2){ return a1-a2; //a2-a1 输入倒序 }); console.log(arr); console.log(arr.reverse()); //reverse颠倒数组中元素的顺序 var arr2 = ['hezihao','chensan','xiaomin','lishi'] arr2.sort(); console.log(arr2); var a

  • JavaScript中用sort()方法对数组元素进行排序的操作

    JavaScript数组sort()方法排序数组的元素. 语法 array.sort( compareFunction ); 下面是参数的详细信息: compareFunction : 指定一个函数,定义排序次序.如果省略,数组字典顺序排序. 返回值: 返回一个排序的数组 例子: <html> <head> <title>JavaScript Array sort Method</title> </head> <body> <s

  • JS排序方法(sort,bubble,select,insert)代码汇总

    最近开始学习数据结构. 一点一点整理,希望能坚持下来. 因为方向是前端,所以用JavaScript实现. //sort排序 var testArr1=[3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]; var testArr2=[3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]; var testArr3=[3, 44, 38, 5, 47, 15, 36, 26, 27

  • Javascript实现快速排序(Quicksort)的算法详解

    目前,最常见的排序算法大概有七八种,其中"快速排序"(Quicksort)使用得最广泛,速度也较快.它是图灵奖得主C. A. R. Hoare(1934--)于1960时提出来的. "快速排序"的思想很简单,整个排序过程只需要三步: (1)在数据集之中,选择一个元素作为"基准"(pivot). (2)所有小于"基准"的元素,都移到"基准"的左边:所有大于"基准"的元素,都移到"

  • JavaScript sort数组排序方法和自我实现排序方法小结

     前言 针对一个数组进行排序,一个很常见的需求.尤其在后端.当然,前端也是有这个需求的. 当然,数组排序,是有现成的方法的.就是sort()方法. 我们先开看下这个. 标准答案,sort方法 var arr = [45,98,67,57,85,6,58,83,48,18]; console.log('原数组'); console.log(arr); console.log('sort方法从小到大排序'); console.log(arr.sort(function(a,b){return a-b

  • 深入JavaScript高级程序设计之对象、数组(栈方法,队列方法,重排序方法,迭代方法)

    继承是OO语言中的一个最为人津津乐道的概念. 许多OO语言都支持两种继承方式:接口继承和实现继承. 接口继承只继承方法签名,而实现继承则继承实际的方法. 如其所述,由于函数没有签名,在ECMAScript中无法实现接口继承. ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的. 1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法. 2.有时候需要传递大量可选参数的情形时,一

  • 基于JS实现数字+字母+中文的混合排序方法

    在上篇文章给大家介绍了JavaScript sort数组排序方法和自我实现排序方法小结,用自己的方法实现了数字数组的排序. 当然,实际运用中,我还是会使用sort方法更加方便.但是,我上一篇博文,仅仅是实现了数字排序,而srot方法默认可是能给字母实现排序的哦!而我的代码只能排序数字,看起来还是弱弱的. 所以,我得加上能排字母甚至中文的排序方法. 实现代码 $(function(){ var arr = ["Jack","Book","Fung"

  • JavaScript自定义数组排序方法

    本文实例讲述了JavaScript自定义数组排序方法.分享给大家供大家参考.具体分析如下: Array中有自带的排序功能,这个使用起来比较方便,我们有一点必须清楚,就是排序的依据,如果sort不传入参数的话,那就是按照字符编码(Unicode编码)的顺序排序. var a=["3","2","1"]; console.log(a[0].charCodeAt(0)); // 51 console.log(a[1].charCodeAt(0)); /

  • JavaScript实现对下拉列表值进行排序的方法

    本文实例讲述了JavaScript实现对下拉列表值进行排序的方法.分享给大家供大家参考.具体如下: function sortList(id) { var obj = document.getElementById("id"); var values = new Array(); for(var i = 0; i < obj.options.length; i++) { values.push(obj.options[i].innerHTML + "--xx--&quo

  • php二维数组排序与默认自然排序的方法介绍

    php二维数组排序函数,默认自然排序,即sort排序.这里可以指定按二维数组中的某个值进行多种方法排序,具体看下面的程序注释. 复制代码 代码如下: /** * @function 二维数组自然排序 * @author www.phpernote.com * @param array $array 需要排序的数组(二维) * @param string key 需要根据哪个键排序 * @param string order 排序方式(SORT_ASC,SORT_DESC) * @param st

  • JavaScript实现表格排序方法

    参考代码: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equ

  • Java排序方法sort用法详解

    本文实例为大家分享了java对数组.集合的排序方法,供大家参考,具体内容如下 对数组的排序: //对数组排序 public void arraySort(){ int[] arr = {1,4,6,333,8,2}; Arrays.sort(arr);//使用java.util.Arrays对象的sort方法 for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } } 对集合的排序: //对list升序排序 public void

  • Python 列表排序方法reverse、sort、sorted详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse()方法 将列表中元素反转排序,比如下面这样 >>> x = [1,5,2,3,4] >>> x.reverse() >>> x [4, 3, 2, 5, 1] reverse列表反转排序:是把原列表中的元素顺序从左至右的重新存放,而不会对列表中的参数进行排序

  • JAVA中Collections工具类sort()排序方法

    本问介绍了Collections工具类两种sort()方法,具体如下: 一.Collections工具类两种sort()方法 格式一: public static <T extends Comparable<? super T>> void sort(List<T> list) 说明:该方法中的泛型<T>都是Comparable接口的子类,即只有是Comparable接口子类类型的数据,才能进行比较排序.如果其他类型的数据要进行比较排序,必须继承Compar

随机推荐