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

Javascript 基于十进制子串的字母数字元素解析与排序,javascript,Javascript,这是我的阵列: var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2","Iteration 2.3","Iteration 2.1"]; 预期产出为: Iteration 3.2 Iteration 3.1 Iteration 2.3 Iteration 2.2 Iteration 2.1 我试过: arr.sort(function(a,b){ a=a.match(/[^a-zA-Z]/); b=b.match(/[^a-zA-Z

这是我的阵列:

var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2","Iteration 2.3","Iteration 2.1"];
预期产出为:

Iteration 3.2
Iteration 3.1
Iteration 2.3
Iteration 2.2
Iteration 2.1
我试过:

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)));
});

要匹配多个字符-正则表达式只匹配一个字符(使用包含比数字字符更多不需要的字符的类)。请尝试此正则表达式(与任何整数或小数点匹配):
/[-+]?[0-9]*\.?[0-9]+/
numeric=new Array();
   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 ));
函数numOrdDesc(a,b){返回(b-a);} var arr=[“迭代3.1”、“迭代3.2”、“迭代2.2”、“迭代2.3”、“迭代2.1”、“迭代10.1”]; 对于(i=0;i

这里的帮助:.p.S.“迭代”字符串可以很容易地添加…:)

这对我很有用:

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;
});
var arr=[“迭代3.1”、“迭代3.2”、“迭代2.2”、“迭代2.3”、“迭代2.1”];
arr.sort(函数(a,b){
a=a.拆分(“”);
b=b.拆分(“”);
var an=parseFloat(a[1],10);
var bn=parseFloat(b[1],10);

返回一个您可以匹配每个项目的整数和小数部分-

var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2",
"Iteration 2.3","Iteration 2.1"];

arr.sort(function(a, b){
    var a1= a.match(/\d+(\.\d+)?/),
    b1= b.match(/\d+(\.\d+)?/); 
    return b1[0]-a1[0];
});


/*  returned value: (Array)
Iteration 3.2, Iteration 3.1, Iteration 2.3, Iteration 2.2, Iteration 2.1
*/

尝试将表达式更改为:/[^a-zA-Z]/(即添加空格)。parseInt不喜欢空格。此外,请使用parseFloat,因为parseInt将删除句点和小数。尝试过后,它不会作为字符排序而不是数字排序,在“迭代10.1”中会出现故障。
var arr=["Iteration 3.1","Iteration 3.2","Iteration 2.2",
"Iteration 2.3","Iteration 2.1"];

arr.sort(function(a, b){
    var a1= a.match(/\d+(\.\d+)?/),
    b1= b.match(/\d+(\.\d+)?/); 
    return b1[0]-a1[0];
});


/*  returned value: (Array)
Iteration 3.2, Iteration 3.1, Iteration 2.3, Iteration 2.2, Iteration 2.1
*/