在javascript中对字母/数字混合数组排序 我有一个混合数组,需要先按数字排序,然后按字母排序
期望输出 我试过使用lodash,但没有得到想要的结果在javascript中对字母/数字混合数组排序 我有一个混合数组,需要先按数字排序,然后按字母排序,javascript,ecmascript-6,Javascript,Ecmascript 6,期望输出 我试过使用lodash,但没有得到想要的结果 您可以使用自定义sot函数,在自定义函数中,将数字和非数字分开,并根据num进行排序,如果两者相等,则比较非数字部分 const arr=['1','2A','2B','2AA','2','10A','10','11','12A','12B','12'] arr.sort((a,b)=>{ //从字符串中提取数字和非数字部分 设as=a.match(/(\d+)(\d*)/); 设bs=b.match(/(\d+)(\d*)/); //返
您可以使用自定义sot函数,在自定义函数中,将数字和非数字分开,并根据num进行排序,如果两者相等,则比较非数字部分
const arr=['1','2A','2B','2AA','2','10A','10','11','12A','12B','12']
arr.sort((a,b)=>{
//从字符串中提取数字和非数字部分
设as=a.match(/(\d+)(\d*)/);
设bs=b.match(/(\d+)(\d*)/);
//返回数字差异(用于基于数字的排序)
//除此之外,检查字符串长度(如果数字相同)
//或比较非数字部分(字符串比较)
返回为[1]-bs[1]| a.length-b.length | as[2]。localeCompare(bs[2]);
})
console.log(arr)
您可以使用自定义sot函数,在自定义函数中,将数字和非数字分开,并根据num进行排序,如果两者相等,则比较非数字部分
const arr=['1','2A','2B','2AA','2','10A','10','11','12A','12B','12']
arr.sort((a,b)=>{
//从字符串中提取数字和非数字部分
设as=a.match(/(\d+)(\d*)/);
设bs=b.match(/(\d+)(\d*)/);
//返回数字差异(用于基于数字的排序)
//除此之外,检查字符串长度(如果数字相同)
//或比较非数字部分(字符串比较)
返回为[1]-bs[1]| a.length-b.length | as[2]。localeCompare(bs[2]);
})
console.log(arr)
您可以使用它来获取数字部分并对其进行排序。如果a
和b
的编号相同,则根据其长度对其进行排序。如果两者长度相同,则使用
let数组=['1'、'2A'、'2B'、'2AA'、'2'、'10A'、'10'、'11'、'12A'、'12B'、'12'];
array.sort((a,b)=>parseInt(a)-parseInt(b)
||a.长度-b.长度
||a.localeCompare(b));
console.log(数组)
您可以使用它来获取数字部分并对其进行排序。如果a
和b
的编号相同,则根据其长度对其进行排序。如果两者长度相同,则使用
let数组=['1'、'2A'、'2B'、'2AA'、'2'、'10A'、'10'、'11'、'12A'、'12B'、'12'];
array.sort((a,b)=>parseInt(a)-parseInt(b)
||a.长度-b.长度
||a.localeCompare(b));
console.log(数组)
2B后需要2AA参考所需输出above@Snivio:比较字符串长度以及2B参考所需输出后所需的2AAabove@Snivio:比较字符串长度以及2B参考所需输出后所需的2AAabove@Snivio将AA
放在B
之后的逻辑是什么?x.sort((a,b)=>parseInt(a)-parseInt(b)| | | a.length-b.length | | a.localeCompare(b));
@PranavCBalan谢谢,我已经添加了这一点。您的答案看起来更具可扩展性。@adiga:您的答案会更快:)2B引用所需输出后需要2AAabove@Snivio将AA
放在B
之后的逻辑是什么?x.sort((a,B)=>parseInt(a)-parseInt(b)| a.length-b.length | a.localeCompare(b))代码>@PranavCBalan谢谢,我已经添加了。您的答案看起来更具可扩展性。@adiga:您的答案会更快:)
var x = ['1','2A','2B','2AA','2','10A','10','11','12A','12B','12']
sortedArray = ['1','2','2A','2B','2AA','10','10A','11','12','12A','12B']
var x = ['1','2A','2B','2AA','2','10A','10','11','12A','12B','12']
_.sortBy(x);
//lodash result
["1", "10", "10A", "11", "12", "12A", "12B", "2", "2A", "2AA", "2B"]