整理与数字结尾的字符串,以结束数
问题描述:
我有值的像一个数组:整理与数字结尾的字符串,以结束数
item1, item10, item11, item2, item3, item4, item5, item6, item7, item8, item9
我:
item1, item3, item2, item4, item5, item8, item6, item9, item10, item7, item11
当我使用.sort()
我得到下面的结果在JavaScript中对它们进行排序知道这是因为项目是字符串,这是什么sort()
旨在做,但我怎么可以将它们分类到以下?
item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11
感谢,
答
您可以定义自己的.sort
回调。事实上,你需要这样做来对数字进行排序。不过,你的情况有点不同。
.sort(function (a, b) {
return (+a.replace("item", "")) - (+b.replace("item", ""));
});
如果item
并不一致,你就可以用.split(/(\d+)/)[1]
数部分假设字部分不包含任何数字:http://jsfiddle.net/Hbs8g/1/
+0
谢谢,很好,很简单,希望我想到它:p –
答
排序需要一个比较函数并会用它对列表进行排序。在调用排序之后,列表将被排序。
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)); });
答
使用后:
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)
答
试试这个,如果对你有帮助
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;
});
最简单的办法是做:'item01','item02'等。 .. – nhgrif
是的,但有可能这些项目可能在数百或更多,所以有一个前缀为0是不是一个完整的方式 –