如何用javascript中的字符和数字以某种方式对数组进行排序

How can i sort an array a certain way with characters and numbers in javascript?

本文关键字:方式 数组 排序 javascript 何用 字符 数字      更新时间:2023-09-26

我想像这样对数组进行排序:

["AAAA1", "AAAA3", "ABAA2", "AAAA10", "AAAA100", "BBB2", "BBB10", "BBAA3", "BBB2AA"]

当我对它进行排序时,会像这样返回:

["AAAA1", "AAAA10", "AAAA100", "AAAA3", "ABAA2", "BBAA3", "BBB10", "BBB2", "BBB2AA"]

我喜欢这样排序:

["AAAA1", "AAAA3", "AAAA10", "AAAA100", "ABAA2", "BBAA3", "BBB2", "BBB2AA", "BBB10"]

所以我在stackoverflow中搜索了一下,发现了一些类似underlinks的东西,但所有这些都没有对字符进行排序的通用方法&数字字符串,只适用于特殊问题!!

javascript:用整数和字符以某种方式对数组进行排序

如何在javascript排序方法中对数字进行排序

如何正确排序整数数组

第1版:

请在包含数字的排序JavaScript字符串数组中检查问题的答案,答案与格式为var regex = /Value's([0-9]+)/;的文本一起使用,或者在排序混合字母/数字数组中,答案仅与字符串开头的一个字符一起使用。。我需要一些方法来处理所有可能包含字符和数字的字符串。。。!!

第2版:

Tanx Felix Kling:

很抱歉,例如,我有错误的数组顺序,所以我喜欢在BBB10之前BBB2AA顺序

我找到了添加前导零的通用方法,我现在写了一个版本,请优化它,或者给我另一个排序选项http://jsfiddle.net/Qd8nd/

根据数字在字符串中的位置,您似乎对数字有不同的处理。如果它们在字符之间,似乎应该按字母顺序进行比较,如果它们出现在末尾,则应该按数字进行比较。如果我错了,请纠正我,否则我无法解释为什么BBB10BBB2AA之前。

这类问题没有"通用方法"。您必须自己实现比较这些值的逻辑。也就是说,你必须将每个值分成字符串和数字部分,并分别比较这些部分:

function parseValue(v) {
    // extract number (defaults to 0 if not present)
    var n = +(v.match(/'d+$/) || [0])[0]; 
    var str = v.replace(n, '');  // extract string part
    return [str, n];
}

您可以在.sort回调中使用该函数:

arr.sort(function(a, b) {
    a = parseValue(a);
    b = parseValue(b);
    // compare string part alphabetically
    var result = a[0].localeCompare(b[0]);
    // if the string part is the same, compare the number part
    return result === 0 ? a[1] - b[1] : result;
});