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

时间:2019-05-22 04:13:53

标签: javascript arrays typescript sorting

如何在数组javascript或打字稿中不区分大小写的情况下进行排序。

就像输入是[/,2,$,3,B,a,A]

输出应为

[$,/,2,3,A,a,B]

4 个答案:

答案 0 :(得分:1)

alert(['/','2','$','3','B','a','A'].sort(Intl.Collator().compare));

检查此示例,因为它与您的输出完全相同,但需要进行一些修改。

答案 1 :(得分:1)

您可以将String.localeComparenumeric: truecaseFirst: "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()顺序排序,除了字母,其中Aa之前,Blet 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