欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-20 19:31:45
先介绍个方法 charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。 stringObject.charCodeAt(index) 简言之 就是获取字符串第一个字符的Unicode 编码,index说是必填 你不填的话默认为0 即第 ......

先介绍个方法

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 . 但是打印出结果 是这样的

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

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

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