2014-03-13 14 views
1

我有一组文本,如[building2, building1 , building3, building5, building4]如何通过javascript中的最后一个数字字符对文本数组进行排序

如何按最后一个数字字符对此数组进行排序,因此整理后的数组将为building1, building2, building3, building4, building5, building6

+1

为了您的具体的例子,'的.sort()'就足够了结束。如果您需要其他的东西,您的示例需要足够好以取消显而易见的解决方案的资格。 – Amadan

+2

“最后的数字[原文]字符”是什么意思?你真的认为foo10应该在foo9之前出现,因为'0' <'9'?或者你真的想比较数值'10'和'9'? –

回答

3
var array = ["building200", "building10", "building3", "building5", "building4"]; 

array.sort(function(a, b){ 
    var char1 = a.substr(a.search(/\d+$/)); // get the last numbers 
    var char2 = b.substr(b.search(/\d+$/)); // get the last numbers 
    return parseInt(char1) - parseInt(char2); // sort by parsing to number 
}); 

alert(array); // ["building3", "building4", "building5", "building10", "building200"] 

a.search(/\d/)将返回遇到的第一个数字指标,并a.substr(that_index)将削减字符串从那里直到结束。

还将如果阵列有一个像["buildingsss2", "buildisng1", "building3", "building5", "builsding4"]

希望帮助不均匀长度的字符串!

+2

@RoyiNamir我很抱歉,但我不明白你的意思。你能否再解释一下。谢谢。 –

+2

@RoyiNamir但我也希望我的函数能处理不同长度的字符串,所以这可能不起作用。虽然感谢:) –

+0

与'a'混淆。认为它意味着数组(删除了这个值本身)删除愚蠢的评论 –

3

您可以使用正则表达式\d+把所有的连续号码,然后通过减去一个从其他两个元素相比较,这样的

var data = [ 'building2', 'building10', 'building3', 'building5', 'building4' ]; 

data.sort(function(first, second) { 
    return /\d+/.exec(first)[0] - /\d+/.exec(second)[0]; 
}); 

console.log(data); 

输出

[ 'building2', 'building3', 'building4', 'building5', 'building10' ] 

注:这比直到现在发布的其他解决方案要好,因为即使数字大于9,这也可以正常工作。

+0

你应该把'$'添加到正则表达式中,以便它匹配实际的最后一个数字,所以你不会在'100building100'中失败(我知道OP没有它,但是我们应该提供可靠的代码 –

2

使用的.sort()方法

var a = ['building2', 'building1' , 'building3', 'building5', 'building4']; 
console.log(a.sort()); 

输出

["building1", "building2", "building3", "building4", "building5"] 

不需要自定义函数

2

Array.sort,使用:

['building2', 'building1', 'building3', 'building5', 'building4']. 
    sort(function(a,b){ 
     return +(/\d{1,}$/.exec(a) || [0])[0] - 
       +(/\d{1,}$/.exec(a) || [0])[0]; 
     } 
); 

这样你可以也排序超过10埠ildings像
['building1', 'building12', 'building302', 'building205', 'building400']
,包括字符串不是数值

+0

+1迄今为止最好的(包括查找数字和最后出现的数字) –

相关问题