Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中对字母/数字混合数组排序 我有一个混合数组,需要先按数字排序,然后按字母排序_Javascript_Ecmascript 6 - Fatal编程技术网

在javascript中对字母/数字混合数组排序 我有一个混合数组,需要先按数字排序,然后按字母排序

在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*)/); //返

期望输出

我试过使用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*)/);
//返回数字差异(用于基于数字的排序)
//除此之外,检查字符串长度(如果数字相同)
//或比较非数字部分(字符串比较)
返回为[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"]