我有以下数组:
var arr = ["COL10","COL5",
"COL4","COL3",
"COL8","COL9",
"COL2","COL7",
"COL1","COL6"];
console.log("After sort:"+arr.sort());
输出结果为:
After sort:COL1,COL10,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9
但我希望它是:
After sort:COL1,COL2,COL3,COL4,COL5,COL6,COL7,COL8,COL9,COL10
我该怎么做?
答案 0 :(得分:2)
对Array.sort
和String.slice
函数使用以下方法:
var arr = ["COL10","COL5","COL4","COL3","COL8","COL9","COL2","COL7","COL1","COL6"];
arr.sort(function (a,b) {
return a.slice(3) - b.slice(3);
});
console.log(arr);

答案 1 :(得分:1)
您可以拆分项目并将各个部分分开。
var arr = ["COL10", "COL5", "COL4", "COL3", "COL8", "COL9", "COL2", "COL7", "COL1", "COL6"];
arr.sort(function (a, b) {
var aa = a.split(/(\d+)/g),
bb = b.split(/(\d+)/g);
return aa[0].localeCompare(bb[0]) || aa[1] - bb[1];
});
console.log(arr);
答案 2 :(得分:0)
尝试Brian Huisman的字母数字排序: Article
var arr = ["COL10", "COL5",
"COL4", "COL3",
"COL8", "COL9",
"COL2", "COL7",
"COL1", "COL6"
];
console.log("After sort:" + arr.sort(alphanum));
function alphanum(a, b) {
function chunkify(t) {
var tz = [],
x = 0,
y = -1,
n = 0,
i, j;
while (i = (j = t.charAt(x++)).charCodeAt(0)) {
var m = (i == 46 || (i >= 48 && i <= 57));
if (m !== n) {
tz[++y] = "";
n = m;
}
tz[y] += j;
}
return tz;
}
var aa = chunkify(a);
var bb = chunkify(b);
for (x = 0; aa[x] && bb[x]; x++) {
if (aa[x] !== bb[x]) {
var c = Number(aa[x]),
d = Number(bb[x]);
if (c == aa[x] && d == bb[x]) {
return c - d;
} else return (aa[x] > bb[x]) ? 1 : -1;
}
}
return aa.length - bb.length;
}
答案 3 :(得分:0)
var arr = ["COL10","COL5",
"COL4","COL3",
"COL8","COL9",
"COL2","COL7",
"COL1","COL6"];
arr.sort(function(a,b) {
var a1 = parseInt(a.split('COL')[1]);
var b1 = parseInt(b.split('COL')[1]);
return a1 - b1;
});