先按十进制,然后按字符串对数组排序-Javascript
我需要使用普通的旧Javascript对这种格式的数组进行排序先按十进制,然后按字符串对数组排序-Javascript,javascript,arrays,string,sorting,Javascript,Arrays,String,Sorting,我需要使用普通的旧Javascript对这种格式的数组进行排序 var arr = ["0.01 BASIC", "0.01 SEF", "0.015 BASIC"]; 我需要的是数组先按十进制排序,然后按字符串排序,并生成一个如下所示的输出 arr = ["0.01 BASIC", "0.015 BASIC", "0.01 SEF"]; 我无法使用jquery执行排序。只需简单的旧Javascript即可。您可以这样做: var arr = ["0.01 BASIC", "0.01 SEF
var arr = ["0.01 BASIC", "0.01 SEF", "0.015 BASIC"];
我需要的是数组先按十进制排序,然后按字符串排序,并生成一个如下所示的输出
arr = ["0.01 BASIC", "0.015 BASIC", "0.01 SEF"];
我无法使用jquery执行排序。只需简单的旧Javascript即可。您可以这样做:
var arr = ["0.01 BASIC", "0.01 SEF", "0.015 BASIC"];
arr.sort(function(a,b){
var at = a.split(' '), bt = b.split(' ');
if (at[1]!=bt[1]) return at[1]>bt[1] ? 1 : -1;
return parseFloat(at[0])-parseFloat(bt[0]);
});
如果要对非常大的数组进行排序,缓存密钥可能会更快。但对于大多数阵列来说,这可能并不重要
:
两个连续的排序将起作用:
arr.sort(function(a,b){
// sort by words first
return a.match(/[a-z]+/i).join("")<b.match(/[a-z]+/i).join()?-1:1;
}).sort(function(a,b){
// sort by numbers next, but only if the words are equal
return a.match(/[a-z]+/i).join("")!==b.match(/[a-z]+/i).join("")?0:parseInt(a)<parseInt(b)?-1:1;
})
arr.sort(函数(a,b){
//先按单词排序
返回a.match(/[a-z]+/i)。使用普通的旧Javascript连接(“”:
var xOriginal=[“0.01基本”、“0.015基本”、“0.01 SEF”];
var xTemp=“”;
对于(var i=0;i yArr[1]))
{
xTemp=xOriginal[i];
xOriginal[i]=xOriginal[j];
xOriginal[j]=xTemp;
}
}
}
警报(原始);
Plain old JS有一个sort
功能。请看这里@elclanrsPlain old JS有一个排序函数
true,但它不能满足他指定的优先排序要求。@FeistyMango:当然可以,你只需要发挥创意并尝试一下。可能还有其他方法,但您可以使用排序
来满足要求。@elclanrs请参见下面的…那里!使用排序的解决方案。很好。@elclanrs lol,这与使用sort()函数几乎没有关系,而与dystroy实现肉和土豆有关。这里的sort()函数只是一个美化了的for循环。我不认为ECMAScript的sort可以保证是稳定的。@你到底是什么意思?我的意思是第二个排序可以合法地完全删除第一个排序给出的顺序。不用说,但我认为通过比较第二个排序中的字符串可以解决这个问题
var xOriginal = ["0.01 BASIC", "0.015 BASIC", "0.01 SEF"];
var xTemp = "";
for(var i=0;i<=xOriginal.length-1;i++)
{
for(var j=1;j<=xOriginal.length-1;j++)
{
var xArr = xOriginal[i].split(" ");
var yArr = xOriginal[j].split(" ");
if((xArr[0] > yArr[0]) && (xArr[1] > yArr[1]))
{
xTemp = xOriginal[i];
xOriginal[i] = xOriginal[j];
xOriginal[j] = xTemp;
}
}
}
alert(xOriginal);