首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于十进制子串的字母数字元素的解析和排序

基于十进制子串的字母数字元素的解析和排序
EN

Stack Overflow用户
提问于 2014-02-19 03:33:50
回答 4查看 120关注 0票数 0

这是我的数组:

代码语言:javascript
运行
复制
var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2","Iteration 2.3","Iteration 2.1"];

预期输出为:

代码语言:javascript
运行
复制
Iteration 3.2
Iteration 3.1
Iteration 2.3
Iteration 2.2
Iteration 2.1

我尝试过:

代码语言:javascript
运行
复制
arr.sort(function(a,b){
a=a.match(/[^a-zA-Z]/);
b=b.match(/[^a-zA-Z]/);
var an=parseFloat(a,10);
var bn=parseFloat(b,10);
return an<bn?1:(an>bn?-1:(a<b?-1:(a>b?1:0)));
});

我现在得到的是:

代码语言:javascript
运行
复制
Iteration 3.1
Iteration 3.2
Iteration 2.2
Iteration 2.3
Iteration 2.1

jsfiddle link

EN

回答 4

Stack Overflow用户

发布于 2014-02-19 03:38:04

您希望匹配多个字符-您的正则表达式只匹配一个字符(使用的类包含更多不需要的字符而不是数字字符)。试试这个正则表达式(它可以匹配任何整数或小数点数字):/[-+]?[0-9]*\.?[0-9]+/

票数 1
EN

Stack Overflow用户

发布于 2014-02-19 04:14:45

这对我很有效:

代码语言:javascript
运行
复制
var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2","Iteration 2.3","Iteration 2.1"];
arr.sort(function(a,b){
    a=a.split(" ");
    b=b.split(" ");
    var an=parseFloat(a[1],10);
    var bn=parseFloat(b[1],10);
    return an<bn?1:-1;
});
票数 1
EN

Stack Overflow用户

发布于 2014-02-19 03:38:58

代码语言:javascript
运行
复制
   numeric = new Array();
function numOrdDesc(a, b){ return (b-a); } 
var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2","Iteration 2.3","Iteration 2.1", "Iteration 10.1"];

for (i=0;i<arr.length;i++) {

 numeric.push(parseFloat(arr[i].replace('Iteration ','')));

}

console.log(numeric.sort( numOrdDesc ));

http://jsfiddle.net/xuXGv/1/

这里的帮助:http://javascript.about.com/library/blsort.htm。附注:可以很容易地添加“‘Iteration”字符串...:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21863597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档