JavaScript按toothNumber字段排序JSON数组结果不符合预期如何解决
问题根因
你当前使用的排序逻辑直接对字符串类型的toothNumber做减法运算,当值包含逗号时会转为NaN,导致排序规则失效,无法按预期的前缀数字优先级排序。
解决方案
你可以自定义排序规则,优先取toothNumber的第一个数字段做数值比较,同数值的短字符串排在前面即可:
json.sort(function(a, b) { // 处理空值,空值排最前 if (a.toothNumber === '') return -1; if (b.toothNumber === '') return 1; // 提取第一个数字段转数值 const numA = parseInt(a.toothNumber.split(',')[0], 10); const numB = parseInt(b.toothNumber.split(',')[0], 10); // 数值不同按数值升序 if (numA !== numB) { return numA - numB; } // 数值相同按字符串长度升序,短值在前,实现"01"排在"01,32"前的效果 return a.toothNumber.length - b.toothNumber.length; });
上述代码运行后得到的排序结果和你预期的完全一致。
内容的提问来源于stack exchange,提问作者DAK
相关产品推荐
相关产品推荐

