大家排序所遇见的问题

普通的一个数组排序,乱序是我123456789、10
[5,3,1,6,2,4,7,9,8,10,11]

如果直接用sort会导致,他会将你的10当成了1.0,1.1
[1,10,11,2,3,4,5,6,7,8,9]

以下我遇见的三个问题


数据排序就是传统的sort
这里的形参我用成了a和z,让开始不懂的人认为是字母排列

var a = [2,1,4,3,11]
a.sort(function(a,z){
    return a-z//或者z-a
})
console.log(a)
//1,2,3,4,11

但是你发现名称加上中文就完了:蜡笔小新1,蜡笔小新3,蜡笔小新2
解决方法:使用localeCompare

var a = ["蜡笔小新1","蜡笔小新3","蜡笔小新4","蜡笔小新2"]
a.sort(function(a, b) {
    return a.localeCompare(b)
})
console.log(a)

但是你知道吗?名称必须加0才可以。比如01,02,03
如果不加会导致和第一个问题一样[1,10,11,2,3]


汉字,并且无需加0

因为汉字排序就跟曾经的1,100,2,3,4,5一样了
通过思否的朋友的帮助,最后选择了Intl
这是最快的解决方案

var a = ["龙珠6","龙珠2","龙珠8","龙珠3","龙珠1","龙珠4","龙珠10"]
const collator = new Intl.Collator(undefined, { numeric: true });
a.sort(collator.compare);

console.log(a)

如果想详细查看,下面就是了

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refer...
或者
http://www.verydoc.net/javascript/00004732.html

image


赵不悔
96 声望4 粉丝

我以为租来的人生也能幸福…要不是幸福终究有个期限,我也就信了。


引用和评论

0 条评论