JavaScript排序含空值/Null的配对数组 置空值于末尾
问题:JavaScript数组排序时将空值/Null置于末尾
现有如下JavaScript配对数组:
var my_array = [['line_1','2'],['line_2','0'],['line_3','5'],['line_4',''],['line_5','4']] var my_sorted_array = my_array.sort((a, b) => a[1] - b[1]) console.log(my_sorted_array)
当前代码通过数组元素的第二个值排序,但需要将空字符串、null这类空值置于排序结果的末尾,期望输出结果为:
[['line_1','2'],['line_5','4'],['line_3','5'],['line_2','0'],['line_4','']]
解决方案
可以通过在排序回调中增加空值判断逻辑来实现,修改后的排序代码如下:
var my_array = [['line_1','2'],['line_2','0'],['line_3','5'],['line_4',''],['line_5','4'], null] // 加入null测试用例 var my_sorted_array = my_array.sort((a, b) => { // 处理数组元素本身为null的情况,避免访问属性报错 const valA = a ? a[1] : null; const valB = b ? b[1] : null; // 定义空值范围:null、undefined、空字符串 const isEmptyA = valA == null || valA === ''; const isEmptyB = valB == null || valB === ''; // 两个都是空值,保持原有顺序 if (isEmptyA && isEmptyB) return 0; // a是空值则排到后面 if (isEmptyA) return 1; // b是空值则排到后面 if (isEmptyB) return -1; // 非空值转换为数值后升序排序 return Number(valA) - Number(valB); }) console.log(my_sorted_array)
逻辑说明
- 先处理数组元素本身为
null的情况,避免访问a[1]或b[1]时报错 - 明确空值判定规则:涵盖
null、undefined、空字符串'' - 空值排序优先级:
- 若两个元素都是空值,保持原有相对顺序
- 仅其中一个是空值时,空值元素直接排到非空值元素之后
- 非空值统一转换为数值后执行升序排序,匹配需求中的排序结果
内容的提问来源于stack exchange,提问作者Nico44044
相关产品推荐
相关产品推荐

