【问题标题】:sorting strings ending with numbers, by the ending number [duplicate]按结束数字排序以数字结尾的字符串[重复]
【发布时间】:2013-10-01 22:34:44
【问题描述】:

我有一个值数组,例如:

item1, item3, item2, item4, item5, item8, item6, item9, item10, item7, item11

当我使用 .sort() 在 javascript 中对它们进行排序时,我得到以下结果:

item1, item10, item11, item2, item3, item4, item5, item6, item7, item8, item9

我知道这是因为这些项目是字符串,这是 sort() 的设计目的,但我如何将它们分类为以下内容?

item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11

谢谢,

【问题讨论】:

  • 最简单的方法是:item01item02 等...
  • 是的,但是项目可能有数百个或更多,因此前缀为 0 并不是完全证明的方式

标签: javascript arrays sorting


【解决方案1】:

您可以定义自己的.sort 回调。实际上,您需要这样做才能对数字进行排序。不过,你的情况有点不同。

.sort(function (a, b) {
    return (+a.replace("item", "")) - (+b.replace("item", ""));
});

演示:http://jsfiddle.net/Hbs8g/

如果item不一致,可以通过.split(/(\d+)/)[1]获取数字部分,假设单词部分不包含任何数字:http://jsfiddle.net/Hbs8g/1/

【讨论】:

  • 谢谢,简单明了,希望我能想到:p
【解决方案2】:

使用关注:

var a = new Array();
a = ['item1', 'item3', 'item2', 'item4', 'item5', 'item8', 'item6', 'item9', 'item10', 'item7', 'item11'];
var temparray = new Array();
for (var i = 0; i < a.length; i++) {
    var substr = (a[i]).substring(4);
    temparray.push(parseInt(substr));
}
temparray.sort(function(a,b){return a-b});
 a=temparray;
console.log(a)

【讨论】:

    【解决方案3】:

    试试这个,如果对你有帮助

    arr.sort(function(a, b) {
    a = a.replace("item", "");
    b = b.replace("item", "");
    if (a > b)
       return 1;
    else if (a < b)
       return -1;
    else
       return 0;
    });
    

    【讨论】:

      【解决方案4】:

      Sort 采用一个比较函数,并将用它对列表进行排序。调用 sort 后,对列表进行排序。

      z = ["item1", "item3", "item2", "item4", "item5", "item8", "item6", "item9", "item10", "item7", "item11"];    
      z.sort(function(a, b) { return parseInt(a.substring(4)) - parseInt(b.substring(4)); });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 2019-09-25
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        相关资源
        最近更新 更多