当前位置: 移动技术网 > IT编程>开发语言>JavaScript > 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-

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-

2019年01月18日  | 移动技术网IT编程  | 我要评论
先介绍个方法 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 . 但是打印出结果 是这样的

 

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

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

  

 

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网