2009-06-25 13 views
1

SortIP関数に入れて、カスタムソート関数を使ってIP番号の最後の桁で配列をソートする必要があります。これは機能しません。Javascriptの配列ソート関数内にカスタム配列を作成する

  1. ADSLルーター:192.168.0.1
  2. ネットワークスイッチ:192.168.0.2
  3. ゲイリーのMac:192.168.0.15
  4. 生産メールアドレス:192.168.0.60配列順序期待

    function SortIP(a, b) 
    { 
        return a[0][3] - b[0][3]; 
    } 
    
    LAN = new Array 
    (
        ["ADSL Router", [192, 168, 0, 1]], 
        ["Gary's Mac", [192, 168, 0, 15]], 
        ["Network Switch", [192, 168, 0, 2]], 
        ["Production Email", [192, 168, 0, 60]] 
    ); 
    LAN.sort(SortIP); 
    

+0

配列リテラル構文 '[...]'を使用し、 'new Array()'では使用しないでください。 – Gumbo

+0

なぜですか? –

答えて

6

あなたは

がちょうど

return a[1][3] - b[1][3];

return a[0][3] - b[0][3];

を置き換えるほとんどそこにいるとすれば完了です。

なぜですか? IPは各配列の2番目の(Index = 1)セルであるためです。

+0

「木の木が見えません」と話す!ありがとう。 –

+0

あなたは大歓迎です:) 仕事で毎日私に起こる –

6

誤った値を比較しています。これを試してください:

function SortIP(a, b) { 
    return a[1][3] - b[1][3]; 
} 
1

ソートハンドラに送信される値は、ソートされる配列の値です。

これはバブルソートなので、アイテムが同じ場合は0、a> bの場合は1、b> aの場合は-1を返す必要があります。

function SortIP(a, b) 
{ 
    if (a[1][3] == b[1][3]) return 0; 
    return (a[1][3] > b[1][3]) ? 1 : -1; 
} 
+0

@Peter:a [1] [3] - b [1] [3]は、同じ場合は0を返します。 'a - b'を使用するとオーバーフローの可能性がありますが、IPアドレスの最後の値をソートしているので、オーバーフローすることはありません。 –

+0

ええ、私は投稿した後にそれを考え出しました。私はそれをそのまま、並べ替えを行うための明示的な方法として残します。 –

1
にあなたのソート機能を変更

:あなたは完全なアドレスでソートしたい場合は、バイトを含む配列のための薄いラッパーを書くことは良い考えかもしれません

function SortIP(a, b) 
{ 
    return a[1][3] - b[1][3]; 
} 
1

function IP4() { 
    var ip = Array.prototype.slice.call(arguments, 0, 4); 
    ip.toString = IP4.toString; 
    ip.valueOf = IP4.valueOf; 
    return ip; 
} 

IP4.toString = function() { 
    return this.join('.'); 
}; 

IP4.valueOf = function() { 
    return (this[0] << 24) | (this[1] << 16) | (this[2] << 8) | this[3]; 
}; 

var LAN = [ 
    ["ADSL Router", IP4(192, 168, 0, 1)], 
    ["Gary's Mac", IP4(192, 168, 0, 15)], 
    ["Network Switch", IP4(192, 168, 0, 2)], 
    ["Production Email", IP4(192, 168, 0, 60)] 
]; 

LAN.sort(function(a, b) { return a[1] - b[1]; }); 
+0

賢いアイデア。 –

関連する問題