4

我有一个值数组,例如:

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

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

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

我知道这是因为这些项目是字符串,这sort()是设计的目的,但我怎样才能将它们分类为以下?

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

谢谢,

4

4 回答 4

6

您可以定义自己的.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/

于 2013-10-01T14:13:00.860 回答
0

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)); });
于 2013-10-01T14:16:45.133 回答
0

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

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;
});
于 2013-10-01T14:30:11.807 回答
0

使用以下:

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)
于 2013-10-01T14:21:35.943 回答