当前位置:编程学习 > JS >>

深入探讨JS的数组排序函数sort()(二)

  这是上一篇关于JS数组函数sort的讲解. 深入探讨JS中的数组排序函数sort()和reverse()。在看此文章的时候,希望大家去看下第一篇文章。因为,此篇文章是基于上一篇文章的基础上的。

  好了,不废话了。开始进入我们今天的正题。

  我感觉,我们在进行WEB编程的过程操作最多的是字符串和数组这两种数组类型。

  有时候,我们大家在进行排序,尤其是数组排序。有可能,我们只是想去排列一组数据中的某一个数据的时候。如下面的这个例子。

  var data = [{name:"Tom",age:"28"},{name:"Cat",age:"29"}...];

  我们只是想对这组数据中的name或age进行排序,这个时候大家就会发现,使用JS中的自代的函数sort()就不能解决这类型的问题。哪么此篇文章就是解决这个问题?

  在简述一下此问题:假设有一个对象数组,我们想要根据某个对象属性对数组进行排序。而传递给数组sort()方法的比较函数要接收两个参数,这两个参数就是比较的值。可是,我们需要一种方式来指明按照哪个属性来排序。而sort()方法只能接受一个参数,这个时候,我们就可以利用一下JS自定义函数的特点来做。好吧,我们来看下。

  

\

 

  看到上图,大家可能有点懵,这个函数定义看起来有点复杂,但实际上无非就是在这个函数的内部嵌套了另一函数,而且,这个内部的函数前面加了一个return操作符。在内部函数接收到pName参数后,使用方括号(可以看作数组取值)表示法来取得指定属性的值。那么,这里大家可能有点不明白,就是我们上篇文章在讲解的时候,明明sort在传递的参数只是一个不带参数的函数。这里我们可以回顾一下,JS函数的相关定义:要访问函数的指针而不执行函数的话,必须去掉函数后面的哪对圆括号。并且,ECMAscript中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不仅可以像传递参数把一样把一个函数函数传递给另一个函数,而且可以将一个函数作为另一个函数的结果返回。

  好吧,我相信,大家现在能明白,这篇文章在sort和上一篇文章的sort函数的参数传递的区别。当然,这里不是我们的重点。

  那么,我们在重新温故一下,sort这个函数,在使用其参数(这个函数是一个自定函数)的时候,他会,指定的数组中的两个元素传递给自定函数。

  那么,在这里,是同样的道理,但是,这里与上一篇文章有点小小的区别,就是,上一篇文章的数组是一维数组。而这篇文章是二维数组,那么这个时候,大家不难想到,传递到函数里面的两个参数的值,就是两个数组,这个时候,在内部里面我们使用 参数[pName]这个组合就能取到这两个函数里面具体的某个属性的值了。这个时候,在按照sort函数的比较方法对这两个值进去比较。就完成了,指定函数的比较了。

  好了,就到这里吧。希望大家能看明白。如果,有什么不懂的可以在文章下面留言。

  起点原创教程

补充:web前端 , JavaScript ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,