3

我需要使用普通的旧 Javascript 对这种格式的数组进行排序。

var arr = ["0.01 BASIC", "0.01 SEF", "0.015 BASIC"];

我需要的是先按十进制然后按字符串对数组进行排序并产生如下所示的输出;

arr = ["0.01 BASIC", "0.015 BASIC", "0.01 SEF"];

我不能使用 jquery 来执行排序。只是普通的旧 Javascript。

4

3 回答 3

6

你可以这样做 :

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

如果要对一个非常大的数组进行排序,缓存键可能会更快。但这对于大多数数组来说可能并不重要。

示例

["0.01 BASIC", "0.01 SEF", "0.015 BASIC", "0.2 BASIC", "0.001 SEF", "0.2 AAA"]
->
["0.2 AAA", "0.01 BASIC", "0.015 BASIC", "0.2 BASIC", "0.001 SEF", "0.01 SEF"] 
于 2013-04-09T06:52:41.510 回答
1

两个连续的排序将起作用:

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;
})
于 2013-04-09T06:55:40.130 回答
1

使用普通的旧 JavascriptFIDDLE

    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);
于 2013-04-09T07:31:16.557 回答