我有一组文本,如[building2, building1 , building3, building5, building4]
。如何通过javascript中的最后一个数字字符对文本数组进行排序
如何按最后一个数字字符对此数组进行排序,因此整理后的数组将为building1, building2, building3, building4, building5, building6
?
我有一组文本,如[building2, building1 , building3, building5, building4]
。如何通过javascript中的最后一个数字字符对文本数组进行排序
如何按最后一个数字字符对此数组进行排序,因此整理后的数组将为building1, building2, building3, building4, building5, building6
?
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"]
希望帮助不均匀长度的字符串!
@RoyiNamir我很抱歉,但我不明白你的意思。你能否再解释一下。谢谢。 –
@RoyiNamir但我也希望我的函数能处理不同长度的字符串,所以这可能不起作用。虽然感谢:) –
与'a'混淆。认为它意味着数组(删除了这个值本身)删除愚蠢的评论 –
您可以使用正则表达式\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,这也可以正常工作。
你应该把'$'添加到正则表达式中,以便它匹配实际的最后一个数字,所以你不会在'100building100'中失败(我知道OP没有它,但是我们应该提供可靠的代码 –
使用的.sort()方法
var a = ['building2', 'building1' , 'building3', 'building5', 'building4'];
console.log(a.sort());
输出
["building1", "building2", "building3", "building4", "building5"]
不需要自定义函数
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']
,包括字符串不是数值
+1迄今为止最好的(包括查找数字和最后出现的数字) –
为了您的具体的例子,'的.sort()'就足够了结束。如果您需要其他的东西,您的示例需要足够好以取消显而易见的解决方案的资格。 – Amadan
“最后的数字[原文]字符”是什么意思?你真的认为foo10应该在foo9之前出现,因为'0' <'9'?或者你真的想比较数值'10'和'9'? –