Javascript:如何按数字然后字母然后符号对数组进行排序?

Niñ*_*001 5 javascript sorting

我正在尝试在 Javascript 中订购这个数组

arr = ["ax", "mof", "4", "63", "42", "3", "10", "[", "23", "adidas", "ba", ")", "ABC"]; 
Run Code Online (Sandbox Code Playgroud)

我希望数组显示如下:

["3", "4", "10", "23", "42", "63", "ABC", "adidas", "ax", "ba", "mof", ")", "["]
Run Code Online (Sandbox Code Playgroud)

也考虑符号 ")" , "[" 。

我想成为数组的顺序是:

  1. 从未成年人到市长的数字
  2. 那么单词,大写字母无关紧要。
  3. 最后是符号。

我知道我必须使用sort(),但问题是我不能用符号对数组进行排序,我有这个问题

我正在使用该代码在 HTML 中显示数组和有序数组

var arr, text, larr, i; 
arr = ["ax", "mof", "4", "63", "42", "3", "10", "[", "23", "adidas", "ba", ")", "ABC"]; 
larr = arr.length;

text = "<ul>";
for (i = 0; i < larr; i++) {
  text += "<li>" + arr[i] + "</li>";
}
text += "</ul>";

document.getElementById("arrayin").innerHTML = text;

console.log(arr);

var arror,textor, larror, j;

arror = arr.sort();

larror = arror.length;

textor = "<ul>";
for (j = 0; j < larror; j++) {
  textor += "<li>" + arror[j] + "</li>";
}
textor += "</ul>";

console.log(arror);

document.getElementById("Oarray").innerHTML = textor;
Run Code Online (Sandbox Code Playgroud)

我的最后一个问题是如何用数字、字母和符号对数组进行排序

Top*_*ope 4

正如您所猜测的,您确实必须使用排序方法并传入比较函数。为了获得您正在寻找的订单,以下检查将起作用。jsfiddle 的完整工作示例在这里 - https://jsfiddle.net/aczhyk8j/1/

function compare(a, b) {
  // check for numberhood
  const numA = !isNaN(a);
  const numB = !isNaN(b);

  if (numA && numB) {
    return Number(a) - Number(b);
  }

  if (numA) return -1;
  if (numB) return 1;

  // check for wordhood
  const wordA = /^[a-zA-Z]+$/.test(a);
  const wordB = /^[a-zA-Z]+$/.test(b);

  if (wordA && wordB) {
    return a.localeCompare(b);
  }

  if (wordA) return -1;
  if (wordB) return 1;

  return 1; // or whatever logic to sort within non-alphanumeric values
}

// Now, use it in your sort method call.
let arr = ["ax", "mof", "4", "63", "42", "3", "10", "[", "23", "adidas", "ba", ")", "ABC"];

arr.sort(compare);
console.log(arr);
Run Code Online (Sandbox Code Playgroud)