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-5-1", "A-1-5-5", "A-4-10-1", "A-1-10-2", "A-2-3-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  這樣就好理解了 比較的時候 是比較相鄰的兩個數。 但是,是從后往前推得  相鄰的倆個數先比較 如果后面的數小 就往前推一位 (就是與前面的數互換位置) 然后一直往前比較 如果小就停在當前位置,大就再往前推一位。

我的理解是這樣的 不知道對不對 希望有大神能指點指點。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM