【问题标题】:How to sort a alphanumeric string value?如何对字母数字字符串值进行排序?
【发布时间】:2012-08-13 08:50:32
【问题描述】:

我在这里使用 javascript 对字母数字字符串值进行排序。但它单独对字符串进行排序。我需要从字符串中拆分数值并对数值进行排序。这是我的代码

 function sortUnorderedList(ul, sortDescending) {
        if (typeof ul == "string")
            ul = document.getElementById(ul);

        var lis = ul.getElementsByTagName("li");
        var vals = [];
        for (var i = 0, l = lis.length; i < l; i++)
            vals.push(lis[i].innerHTML);

        vals.sort();

        if (sortDescending)
            vals.reverse();

        for (var i = 0, l = lis.length; i < l; i++)
            lis[i].innerHTML = vals[i];
    }

有什么建议吗?

编辑:当前结果

PPG 101
PPG 102
PPG 57
PPG 58
PPG 99

预期结果:

PPG 57
PPG 58
PPG 99
PPG 101
PPG 102

【问题讨论】:

  • 请提供示例 HTML,以便我们了解您要完成的工作。您是否尝试从 LI 标记列表中对数字进行排序,同时忽略 HTML 中的所有非数字?
  • @jfriend00: 不,首先我需要在排序数字之后对字母进行排序

标签: javascript sorting


【解决方案1】:

要执行数字排序,您必须在调用排序方法时将函数作为参数传递。

vals.sort(function(a, b) { 
    return (a-b);
});

详情请见http://www.javascriptkit.com/javatutors/arraysort.shtml

【讨论】:

  • 我没有看到数字前面的字符串,使用下面更完整的Mitch Satchwell函数(它的想法相同)。
【解决方案2】:

如果您希望先按字符串排序,然后按空格后的数值排序,则需要指定自己的函数以传递给sort 函数,如下所示:

arr.sort(function(a,b) { 
  a = a.split(' ');
  b = b.split(' ');
  if (a[0] == b[0]) {
    return parseInt(a[1]) - parseInt(b[1]);
  }
  return a[0] > b[0];
});

上面的示例首先按字符串排序,然后按字符串后面的数字(数字)排序。上面的代码适用于被排序的假设值将始终采用上述格式并且缺少对输入的任何检查。

【讨论】:

  • 第一次点击它工作正常...但第二次点击显示错误 Microsoft JScript 运行时错误:'0' 为空或不是对象
【解决方案3】:
function sort(values) {
    var y = values.sort(function (a, b) {
        var x = a.split(' ');
        var y = a.split(' ');
        if (parseInt(x[1]) > parseInt(y[1])) {
            return a > b;
        }
        return a < b;
    });
    return y;
}

【讨论】:

  • 请详细说明
  • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
猜你喜欢
  • 2021-09-19
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 2012-03-16
  • 2011-03-10
  • 2021-09-17
  • 2013-06-20
相关资源
最近更新 更多