3

プレーンな古い Javascript を使用して、この形式の配列を並べ替える必要があります。

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

私が必要とするのは、配列を最初に10進数で、次に文字列でソートし、以下のような出力を生成することです;

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

2 つの連続した並べ替えが機能します。

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 に答える