怎么在JavaScript中对数组对象进行排序

  介绍

怎么在JavaScript中对数组对象进行排序?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>一、普通数组排序

js中用方法排序()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数。如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序。如:

var  arr =, (“a",,“b",,“a",,“b"];   arr.sort ();   console.log (arr);//(“A",,“B",,“A",,“B"]

因为字母A, B的ASCII值分别为65年,66年,而A, B的值分别为97年,98年,所以上面输出的结果是[“A",“B",“A",“B"]。

如果数组元素是数字呢,结果会是怎样?

var  arr =,(15日,8日,25日,3];   arr.sort ();   console.log (arr);//[15日,25日,3日,8]

结果是[3,15日,25日8]。其实,这种方法会调用每个数组项的toString()方法,得到字符串,然后再对得到的字符串进行排序。虽然数值15比3大,但在进行字符串比较时“15”则排在“3“前面。显然,这种结果不是我们想要的,这时,排序()方法的参数就起到了作用,我们把这个参数叫做比较函数。

比较函数接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。例子:

var  arr =,(23日,9日,4日,78年,3];   var  compare =, function  (x, y),{//比较函数   ,if  (x  & lt;, y), {   ,return  1;   ,}else  if  (x 祝辞,y), {   ,return  1;   ,}else  {   ,return  0;   ,}   }   console.log (arr.sort(比较),

结果为[78]3、4、9日23日,返回了我们想要的结果。如果要按降序排序,比较函数写成这样即可:

var  compare =, function  (x, y), {   ,if  (x  & lt;, y), {   ,return  1;   ,}else  if  (x 祝辞,y), {   ,return  1;   ,}else  {   ,return  0;   ,}   }

我们并不能用比较函数比较一个不能转化为数字的字符串与数字的顺序:

var arr=[“b" 5];
console.log (arr.sort(比较))

结果是“b" 5。因为比较函数在比较时,会把先把字符串转化为数字,然后再比较,字符串b不能转化为数字,所以就不能比较大小。然而,当不用比较函数时,会比较ASCII值,所以结果是[5,“b"] .

<强>二、数组对象排序

如果数组项是对象,我们需要根据数组项的某个属性对数组进行排序,要怎么办呢?其实和前面的比较函数也差不多:

var  arr =, ({name:,“zlw",,年龄:,24},,{名称:,“wlz",,年龄:,25});   var  compare =, function (其中obj1, methoda), {   ,var  val1 =, obj1.name;   ,var  val2 =, obj2.name;   ,if  (val1  & lt;, val2), {   ,return  1;   ,}else  if  (val1 祝辞,val2), {   ,return  1;   ,}else  {   ,return  0;   ,},   },   console.log (arr.sort(比较),

var  compare =, function (道具),{   ,return  function (其中obj1, methoda), {   ,var  val1 =,其中obj1[支持];   ,var  val2 =, methoda(道具);if  (val1  & lt;, val2), {   return 才能;1;   ,}else  if  (val1 祝辞,val2), {   return 才能;1;   ,}else  {   return 才能;0;   ,},   }大敌;   }

如果想按年龄照进行排序,arr.sort(比较(“age"))即可。

但是对年龄属性进行排序时需要注意了,如果时代属性的值是数字,那么排序结果会是我们想要的。但很多时候我们从服务器传回来的数据中,属性值通常是字符串。现在我把上面的数组改为:

var arr=[{名称:“zlw",年龄:“24”},{名称:“wlz",年龄:“5”;}];

可以看的到,我把年龄属性由数字改为了字符串,第二个数组项的年龄值改为了“5”;。再次调用arr.sort(比较(“age"))后,结果为:

[对象{name=皕lw",年龄=?4”},对象{name=皐lz",年龄=?”;}]

我们的期望是5排在25前面,但是结果不是。这是因为当两个数字字符串比较大小时,会比较它们的ASCII值大小,比较规则是:从第一个字符开始,顺次向后直到出现不同的字符为止,然后以第一个不同的字符的ASCII值确定大小,所以“24”与“5“比较大小时,先比较“2”与“5“的ASCII值,显然“2”的ASCII值比“5,小,即确定排序顺序。

怎么在JavaScript中对数组对象进行排序