前置知识
Array.prototype.sort()方法。sort()方法中若是回调函数,回调函数格式:(a, b) => { return xxx },其中a、b为数组中任意值。
当返回值大于 0 时,a 放在 b 后面; 当返回值小于 0 时,a 放在 b 前面; 当返回值等于 0 时,ab 位置保持不变;
为什么 a - b 就是升序,b - a 就是降序???
当 a > b: a - b > 0 ,排序结果 ===> b,a (升序) b - a < 0 ,排序结果 ===> a,b (降序) 当 b > a: a - b < 0 ,排序结果 ===> a,b (升序) b - a > 0 ,排序结果 ===> b,a (降序) 当 a=b: a - b = b - a =0 , 排序结果 ===> 保持不变
由上可知:无论a>b还是b>a,return a-b 总能得到升序结果,而 return b-a 总能得到降序结果。
题设
/*题目描述:有一组版本号如下['0.1.1', '2.3.3', '0.302.1', '4.2', '4.3.5', '4.3.4.5']。现在需要对其进行排序,排序的结果为 ['4.3.5','4.3.4.5','2.3.3','0.302.1','0.1.1']*/function versionSort(arr) {return arr.sort((a, b) => {let i = 0; // 下标,一位一位取版本号数字const a1 = a.split('.');const b1 = b.split('.');while(true) {const s1 = a1[i];const s2 = b1[i];i++;// 当版本号字符串长度不够时,取值为 undefinedif (s1 === undefined || s2 === undefined) {return b1.length - a1.length}if (s1 === s2) continue;// sort((a, b) => a - b)// 返回值 > 0,a 在 b 后;返回值 < 0,a 在 b 前;(大后小前)return s2 - s1}})}var version = ['0.1.1', '2.3.3', '0.302.1', '4.2', '4.3.5', '4.3.4.5', '4.3.5.1'];versionSort(version) // ["4.3.5.1", "4.3.5", "4.3.4.5", "4.2", "2.3.3", "0.302.1", "0.1.1"]
