【问题标题】:Sort JavaScript String Array containing numbers对包含数字的 JavaScript 字符串数组进行排序
【发布时间】:2011-03-07 17:11:51
【问题描述】:

我在 JavaScript 中有一个数组,其中包含以下内容:

  • [“值 1”,“值 5”。 “价值 10”、“价值 11”];

我将如何对该数组进行排序,使其不会如下所示:

  • [“值 1”,“值 10”。 “价值 11”、“价值 5”];

但是作为:

  • [“值 1”,“值 5”。 “价值 10”、“价值 11”];

任何帮助都会很棒。

【问题讨论】:

  • 如果所有值的前缀完全相同,为什么不在需要显示时添加一个字符串前缀变量并仅存储数值?如果它们不同且可变,那么就像 kgb 所说,您将需要一个自然排序库。

标签: javascript string arrays sorting numbers


【解决方案1】:

您需要从字符串中提取数值并根据这些数值进行排序,就像 vlood 所说的那样。例如,试试这个代码:

function mySort(arr)
{
    var regex = /Value\s([0-9]+)/;

    function map(str) {
        return Number(regex.exec(str)[1]);
    }

    return arr
    .sort(
        function (a,b) {
            var av = map(a), bv = map(b);
            return av < bv ? -1 : av > bv ? 1 : 0;
        })
}

mySort(["Value 1", "Value 10", "Value 11", "Value 5"]);

【讨论】:

    【解决方案2】:

    如果你热衷于自己编写它,你可以只用正则表达式解析项目并比较第二部分。这些将匹配类似

    "值\s[1-9][0-9]*"

    【讨论】:

      【解决方案3】:

      您需要自然排序。我认为 js 中没有内置实现,但您可以使用一些库。例如:phpjs - natcasesort

      【讨论】:

      猜你喜欢
      • 2020-02-18
      • 2020-08-15
      • 2019-05-26
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      相关资源
      最近更新 更多