2012-03-08 1 views
-1

配列を特定の方法でソートしようとしていますが、効率的に、できれば.sort()関数を使って処理しようとしています。ここで私がして作業する必要があり、アレイの種類の例として、次のとおりです。javascript:配列を整数と文字で特定の方法で並べ替える

["13", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "3a", "2s", "2", "2a"] 

ルール:

ソート整数値で、私が探しています何をここで

["10", "11", "12", "13", "2", "3", "4", "5", "6", "7", "8", "9", "2a", "2s", "3a"] 

され、ソート後降順。 "a"が付加された整数の値は小さくなります。 "s"が付加された整数は大きな値を持つ。従って、2aは2と1との間にあり、2は2と3の間にある。3aは2より大きい。

助けてください!

+2

:ここにデモの作業

? – bfavaretto

+0

メンバをソートするロジックを使用する[compareFunction to sort](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/sort)を提供することができます。 – RobG

+1

あなたは配列が不正なトークンエラーの原因になることを認識していますか?それらのすべてが文字列であることを意味しますか? – paislee

答えて

2

ここでは、JavaScriptの.sort()機能を使用する方法があります。 "2a"と "2s"を許可したいので、私はすべての入力が文字列であると仮定しています。あなたが立ち往生しているhttp://jsfiddle.net/jfriend00/NDbcC/

var input = ["10", "11", "12", "13", "2", "3", "4", "5", "6", "7", "8", "9", "2a", "2s", "3a"]; 

var suffix = {"s": 1, "a": -1, 
     "0": 0, "1": 0, "2": 0, "3": 0, "4": 0, "5": 0, 
     "6": 0, "7": 0, "8": 0, "9": 0}; 

input.sort(function(a, b) { 
    var numA = parseInt(a, 10), numB = parseInt(b, 10); 
    if (numA == numB) { 
     numB = suffix[b.charAt(b.length - 1)]; 
     numA = suffix[a.charAt(a.length - 1)]; 
    } 
    return(numB - numA); 
}); 

//output is: 
// ["13", "12", "11", "10", "9", "8", "7", "6", "5", "4", "3", "3a", "2s", "2", "2a"] 
+0

これは私が探していたものです。私の答えよりも短い。ありがとう! – Zyren

1

基本的には、数値を解析して比較し、次の文字が「a」の場合は1を追加し、逆の並べ替えの場合は「1」を減算する必要があります。

これは私が思い付いた、それはすべての文字列または混合文字列と番号を使用して、1つのアレイで動作しますです。

var weirdSort = (function() { 
    var chr = String.prototype.charAt, 
     add = {a:1, s:-1}; 

    return function (a, b) { 
     var intA = parseInt(a), intB = parseInt(b); 

     if (intA === intB) { 
      if (isNaN(a)) 
       intB = intA + add[chr.call(a, 1)]; 

      if (isNaN(b)) 
       intA = intB + add[chr.call(b, 1)]; 
     } 

     return intB - intA; 
    } 
})(); 

[10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9, "2a", "2s", "3a"].sort(weirdSort); 
//-> [13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, "3a", "2s", 2, "2a"] 

ありより簡単な方法であることが、私は私の脳があることができると思うかもしれません午前1時にフルキャパシティで働いていないと言います。

+0

** **は認められません。それは輝かしいです。 –

関連する問題