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 . 但是打印出结果 是这样的
注意看下面的 后面的值是a :a-1-5-5 前面的值是b: a-1-10-2 这样就好理解了 比较的时候 是比较相邻的两个数。 但是,是从后往前推得 相邻的俩个数先比较 如果后面的数小 就往前推一位 (就是与前面的数互换位置) 然后一直往前比较 如果小就停在当前位置,大就再往前推一位。
我的理解是这样的 不知道对不对 希望有大神能指点指点。