编码顺序是指按照一定规则对数据进行编码的顺序,字典排序是指按照字典序对字符串进行排序的方法。在编码顺序相同的情况下,字典排序可以用来比较字符串的大小。
下面具体说一下,看个数组:
const names = ['李晓华','吴小希','菜徐困','海王','赵丽云','孙小明','只因']
这里有一个汉字作为数组,怎么进行升序来排序?
这个时候我们可以使用sort
函数,不给他传参数的时候默认按照字符的顺序来排序
names.sort()
console.log(names); // ['只因','吴小希', '孙小明', '李晓华', '海王', '菜徐困', '赵丽云']
按照拼音排序的话应该是菜徐困
在最前面,所以这个sort默认并不是我们想要的结果
sort
默认的是字符顺序,所谓的字符顺序其实就是ASCll码
顺序,我们可以通过.charCodeAt(0)
查看字符的编码
console.log('菜'.charCodeAt(0)); // 33756
console.log('吴'.charCodeAt(0)); // 21556
如果按照编码排序是没问题,但是这里的汉字排序并不是按照编码的顺序,我们想按照拼音的顺序进行排序
也就是字典顺序,网上也有许多的库,将汉字拆分成拼音,不过用起来比较麻烦。Js中已经提供一个API,来得到这个字典顺序。
localeCompare
localeCompare
是JavaScript中用来比较字符串的方法,它可以按照本地化规则进行比较,支持多种语言和字符集。localeCompare
方法返回一个数字,表示两个字符串的比较结果,具体规则如下:
- 如果字符串A小于字符串B,返回负数;
- 如果字符串A等于字符串B,返回0;
- 如果字符串A大于字符串B,返回正数。
他可以与另外一个字符进行比较,例如:
console.log('菜'.localeCompare('吴')); // -1
console.log('赵'.localeCompare('赵')); // 0
console.log('吴'.localeCompare('菜')); // 1
如果说这个字符在字典里出现的数字比后面的字符大,那么就等于-1,如果出现在他之前,那么就是1。如果链各个相等的话就为0, 这里就可以比较出字典排序了
names.sort((a,b)=>a.localeCompare(b))
console.log(names); // ['菜徐困', '海王', '李晓华', '孙小明', '吴小希', '赵丽云', '只因']
使用场景:对于文字排序的时候是比较有用的,例如后台对人员名称的升降序等等
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END