为了账号安全,请及时绑定邮箱和手机立即绑定

sort的排序问题

sort 排序默认是升序的,并且 是以字符串的形式升序,如果要以字符串的形式降序呢?怎么做呢?难道只能使用reverse吗?

正在回答

3 回答

var arr = ['sp', 'bd', 'bc', 'sq', 'nb', 'na'];

document.write(arr + "<br />");

arr.sort(function(a, b){return (a + '').localeCompare(b + '')});

document.write(arr);


0 回复 有任何疑惑可以回复我~
#1

点灯夜 提问者

解决的很完美,不过应该这样写return (b + '').localeCompare(a + '');因为要的是降序嘛
2016-06-11 回复 有任何疑惑可以回复我~
#2

啊啊啊啊123 回复 点灯夜 提问者

没看懂
2016-06-19 回复 有任何疑惑可以回复我~

sort需要调用函数才能排序,sort(方法函数)如果"()"括号里面没有方法函数,则数组元素默认unicode这个码的顺序排列。(暂时理解它无序排列吧)

如果sort“()”里面加上方法函数则按这个方法函数排序。方法函数需要自己设定function(a,b)

function sortNum(a,b) {
    return b-a;//这是降序(a-b//这是升序)
   }
var myarr = new Array("80","16","50","6","100","1");
document.write(myarr.sort(sortNum));

注意: 该函数function(a,b)要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下: 

  若返回值<=-1,则表示 A 在排序后的序列中出现在 B 之前。
  若返回值>-1 && <1,则表示 A 和 B 具有相同的排序顺序。
  若返回值>=1,则表示 A 在排序后的序列中出现在 B 之后。

(可能这个地方不好理解,把A,B代入就可以了,前面的元素是A,A后面是B)

reverse则是颠倒数组元素顺序.本来是159357,颠倒后是753951。


0 回复 有任何疑惑可以回复我~

可以自定义sort()方法,function  sort(a,b){return b-a;}

举个例子a=2,b=3返回的如果大于等于1,a和b位置就会互换,就是a,b位置互换,是不是大的在前面,小的就在后面了,也就是降序了。

如果用封装好的方法reverse()就更省事了呢?


0 回复 有任何疑惑可以回复我~
#1

点灯夜 提问者

return b-a;这种的话 是把字符串数字化后的排序结果,以字符串方式降序排咧呢
2016-06-11 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468043    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

sort的排序问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信