JavaScript二维数组按第二列排序结果异常问题排查
问题原因
- 自定义排序函数中
a[1] - b[1]的逻辑错误:减号运算符会自动尝试将两侧的操作数转换为数字进行数值计算,你需要比较的是字符串类型的药品名,非数字格式的字符串转数字结果统一为NaN,sort方法接收到无效的返回值时会判定两个元素顺序相等,不会调整位置,因此最终排序结果和原数组完全一致。 - 一维数组调用无参
sort()时,默认行为就是将所有元素转为字符串,按照Unicode码点顺序排序,正好匹配你的字符串排序需求,所以结果正确。
修复代码
将自定义排序函数的返回值替换为字符串专用的localeCompare比较方法即可:
data1.sort(function(a, b) { // 按第二列的字符串字典序排序 return a[1].localeCompare(b[1]); });
如果需要适配忽略大小写、特殊字符排序等场景,可以给localeCompare补充对应配置参数,例如忽略大小写的写法为a[1].localeCompare(b[1], undefined, {sensitivity: 'base'})。
内容的提问来源于stack exchange,提问作者PriyankaJ
相关产品推荐
相关产品推荐

