js sort()函数 排序问题 var arr =['A-1…

2019-01-21 02:39:04来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

先介绍个方法

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
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:[node.js] fs.renameSync()报错

下一篇:iframe自动调整大小的常见问题