如何在数组javascript或打字稿中不区分大小写的情况下进行排序。
就像输入是[/,2,$,3,B,a,A]
输出应为
[$,/,2,3,A,a,B]
答案 0 :(得分:1)
alert(['/','2','$','3','B','a','A'].sort(Intl.Collator().compare));
检查此示例,因为它与您的输出完全相同,但需要进行一些修改。
答案 1 :(得分:1)
您可以将String.localeCompare与numeric: true
和caseFirst: "upper"
选项一起使用字母数字。对于符号的情况,您可以匹配正则表达式,并使用charCodeAt
进行排序:
let data = ['/', '2', '$', '3', 'B', 'a', 'A']
let regEx = new RegExp(/[^a-zA-Z\d\s:]/)
let result = data.sort((a, b) => {
if (regEx.test(a) && regEx.test(b))
return a.charCodeAt(0) - b.charCodeAt(0)
else
return a.localeCompare(b, 'en', { numeric: true, caseFirst: 'upper'})
})
console.log(result)
答案 2 :(得分:1)
这就是您想要的:
var arr = ["/", "2", "$", "3", "B", "a", "A"];
var sorted = arr.sort(function(a, b) {
var g = /^[A-Z]$/i;
if (!g.test(a) || !g.test(b)) return a < b ? -1 : a > b ? 1 : 0;
var r = a.toLowerCase().localeCompare(b.toLowerCase());
return r ? r : b.localeCompare(a);
});
console.log(...sorted); // => $ / 2 3 A a B
答案 3 :(得分:0)
这可能对您有用。它按照默认的.sort()
顺序排序,除了字母,其中A
在a
之前,B
在let arr = ['/','2','$','3','B','a','A'];
arr.sort((a,b) => {
let match = /\w/;
//if it's an alphabet, we sort according to uppercase first
if (match.test(a) && match.test(b)) {
return a.localeCompare(b, "en", {caseFirst:"upper"});
}
// for all other symbols and numbers, we follow default .sort order
else {
let test = [a,b].sort();
return (test[0] === a)?-1:1;
}
});
console.log(arr); //['$', '/', 2, 3, 'A', 'a', 'B']
之前:
function Stack() {
// some code
}
export default Stack // <== check if word "default" used here