Javascript 停止区分大小写的排序数组

Javascript 停止区分大小写的排序数组,javascript,arrays,typescript,sorting,Javascript,Arrays,Typescript,Sorting,如何在数组javascript或typescript中不使用区分大小写的排序 类似的输入是[/,2,$,3,B,a,a] 输出应该是 [$,/,2,3,A,a,B] alert(['/'、'2'、'$'、'3'、'B'、'a'、'a'].sort(Intl.Collator().compare))对于字母数字,您可以使用withnumeric:true和caseFirst:“upper”选项。对于符号情况,您可以在正则表达式上进行匹配,并使用charCodeAt进行排序: let data

如何在数组javascript或typescript中不使用区分大小写的排序

类似的输入是
[/,2,$,3,B,a,a]

输出应该是

[$,/,2,3,A,a,B]
alert(['/'、'2'、'$'、'3'、'B'、'a'、'a'].sort(Intl.Collator().compare))
对于字母数字,您可以使用with
numeric:true
caseFirst:“upper”
选项。对于符号情况,您可以在正则表达式上进行匹配,并使用
charCodeAt
进行排序:

let data=['/'、'2'、'$'、'3'、'B'、'a'、'a']
让regEx=newregexp(/[^a-zA-Z\d\s://)
让结果=数据。排序((a,b)=>{
if(正则表达式测试(a)和正则表达式测试(b))
返回a.charCodeAt(0)-b.charCodeAt(0)
其他的
返回a.localeCompare(b,'en',{numeric:true,caseFirst:'upper'})
})

console.log(结果)
这是您想要的:

var arr=[“/”、“2”、“美元”、“3”、“B”、“a”、“a”];
var sorted=arr.sort(函数(a,b){
var g=/^[A-Z]$/i;
如果(!g.test(a)| |!g.test(b))返回ab?1:0;
var r=a.toLowerCase().localeCompare(b.toLowerCase());
返回r?r:b.localeCompare(a);
});

console.log(…排序);//=>$/2 3 A B
这可能适合您。它根据默认的
.sort()
顺序进行排序,字母表除外,其中
A
位于
A
之前,后者位于
B
之前:

设arr=['/'、'2'、'$'、'3'、'B'、'a'、'a'];
arr.sort((a,b)=>{
让match=/\w/;
//如果是字母表,我们先按大写字母排序
if(匹配测试(a)和匹配测试(b)){
返回a.localeCompare(b,“en”,{caseFirst:“upper”});
}
//对于所有其他符号和数字,我们遵循默认的排序顺序
否则{
设test=[a,b].sort();
返回(测试[0]==a)?-1:1;
}
});

控制台日志(arr)//[“$”、“/”、2、3、“A”、“A”、“B”]
2
3
数字还是字符串?如果在未排序的数组中,
A
A
之前,那么为什么结果中
A
A
之前?@MrGeek:所有值都是字符串。我希望字母顺序跟在大写字母后面,如A、A、B。如果是这种情况,请检查我的答案。我正在寻找除字母顺序以外的所有值的正常排序,A、A、B$应作为数组的默认行为排在第一位sorting@klmuralimohan为什么
$
应该放在第一位?这不是原始阵列中的第一个@klmuralimohan现在,
$
排在第一位,但问题中没有提到。感谢您的快速更新,但我不是在寻找“$”的硬代码修复。除了字母顺序,它应该像array.sort()一样排序。@klmuralimohan它现在应该像
array.sort()
一样排序,除了字母顺序。谢谢,但是硬代码修复是不可取的,值可以是任何symbmol。使用更好的正则表达式进行更新,该正则表达式匹配非字母数字,因此您可以在
charCodeAt
而不是localeCompare等上进行匹配。感谢快速解决方案。感谢您的努力。很抱歉,无法实现此场景,[“/”、“2”、“美元”、“3”、“英国”、“a”、“亚洲”]。只有单信分拣工作正常。