先按十进制,然后按字符串对数组排序-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

我需要使用普通的旧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", "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
功能。请看这里@elclanrs
Plain 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);