js sort()函数 排序问题 var arr =['A-1-5-1','A-1-10-2','A-1-5-5','B-2-3-1','C-4-10-1'], 对这个数组进行排序,想达到的效果是[...

先介绍个方法

charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。

stringObject.charCodeAt(index)

参数描述
index必需。表示字符串中某个位置的数字,即字符在字符串中的下标。

简言之 就是获取字符串第一个字符的Unicode 编码,index说是必填 你不填的话默认为0 即第一位的编码值。

 1 var arr = ['A-1-5-1','B-2-3-1','C-4-10-1','A-1-10-2','A-1-5-5']
 2 // console.log(arr)
 3     arr.sort(compare);
 4     function compare(a,b) { 
 5            if(a.charCodeAt(0) === b.charCodeAt(0)){
 6             // console.log('a:'+a);
 7             // console.log('b:'+b);
 8             let arr1 = a.split('-');
 9             let arr2 = b.split('-');
10             arr1.shift();
11             arr2.shift();
12             return sortBL(arr1,arr2);
13         } else {
14             // console.log(a);
15             // console.log(b);
16             // console.log('----------------------')
17             return a.charCodeAt(0) - b.charCodeAt(0);
18         }
19     }
20     function sortBL(arr1,arr2) {
21         if(arr1.length < 1 || arr2.length < 1 ) {
22             return arr1[0] - arr2[0];
23         }
24         if(arr1[0] === arr2[0] && arr1[1] !== arr2[1]) {
25             // console.log('2222222')
26             return arr1[1] - arr2[1];
27         } else {
28             // console.log('3333333')
29             arr1.shift();
30             arr2.shift();
31             return sortBL(arr1,arr2);
32         }
33     }
34     console.log(arr)

 

可能打印比较多  是为了看看 sort() 方法到底是如何执行的。结果与我想的不一样。

我以为比较时应该是 数组第一个值是a  第二个值是b . 但是打印出结果 是这样的

 

注意看下面的  后面的值是a :A-1-5-5  前面的值是b: A-1-10-2  这样就好理解了 比较的时候 是比较相邻的两个数。 但是,是从后往前推得  相邻的俩个数先比较 如果后面的数小 就往前推一位 (就是与前面的数互换位置) 然后一直往前比较 如果小就停在当前位置,大就再往前推一位。

我的理解是这样的 不知道对不对 希望有大神能指点指点。

  

 

转载于:https://www.cnblogs.com/hilad/p/10284194.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值