TypeScript中按带数字的字符串属性正确排序数组的方法
按D+数字格式的字符串属性实现正确排序
你当前用localeCompare得到的是字典序排序结果——字符串比较会逐个字符对比,"D10"的第二个字符是'1',比"D3"的第二个字符'3'小,所以排在前面。要实现按数字大小的升序排序,得提取字符串里的数字部分做数值比较。
方法1:适配固定前缀'D'的场景
直接去掉前缀后转成整数对比:
this.list = v.sort((a, b) => { const numA = parseInt(a.property.replace('D', ''), 10); const numB = parseInt(b.property.replace('D', ''), 10); return numA - numB; });
方法2:通用场景(前缀不固定或含其他非数字字符)
用正则提取字符串中的连续数字,适配更复杂的格式:
this.list = v.sort((a, b) => { const numA = parseInt(a.property.match(/\d+/)[0], 10); const numB = parseInt(b.property.match(/\d+/)[0], 10); return numA - numB; });
两种方法都能让列表按数字大小升序排列,得到你期望的D3 → D5 → D10 → D11的顺序。
内容的提问来源于stack exchange,提问作者jsfrz
相关产品推荐
相关产品推荐

