2012-01-16 19 views
1

$.eachを使用している人を見つけることができる唯一の例はhtmlサンプルです。私はobj3obj4でソートしたい

$(array).each(function(index, value) { 
    // ... 
}); 

:そうのようなオブジェクトを介して

var obj = { 
    obj1: 39, 
    obj2: 6, 
    obj3: 'text' 
    obj4: 'text' 
    obj5: 0 
}; 

Iループ:私は、以下の目的を持っています。非同期メソッドを使用しないことをお勧めします。出力前(または出力中)に結果を並べ替えるにはどうすればよいですか?任意の時点で数百があるかもしれないとして、(私はまた、二回このをループにしたくない。

+0

プロパティは順序付けられていません。「配列」は単なる通常のオブジェクトです。実際の配列、例えば[["obj1"、39]、["obj2"、6]、...] 'を持っているか、* first *キーをソートし、*ソートされた* collectinキー。 –

+0

この[question/answer](http://stackoverflow.com/a/1359808/843985)も参照してください。 – scessor

+0

あなたの「配列」は単なるオブジェクトです。あなたはオブジェクトのプロパティをソートしようとしていますか、本当にこのようなオブジェクトの配列を持っていますか? – tvanfosson

答えて

9
var array = { 
    obj1: 39, 
    obj2: 6, 
    obj3: 'text' 
    obj4: 'text' 
    obj5: 0 
}; 

配列(にもかかわらず、その名前)ではありません。それはオブジェクトである。によりソートの考え方obj3obj4は本当に意味がありません。

を今、あなたがオブジェクトの配列にこのオブジェクトを変換した場合、あなたはarray.sort方法とその配列を並べ替えることができます。

var array = [ 
    { obj1: 39, 
     obj2: 6, 
     obj3: 'text' 
     obj4: 'text' 
     obj5: 0 
    },{ obj1: 40, 
     obj2: 7, 
     obj3: 'text2' 
     obj4: 'text3' 
     obj5: 0 
    } 
]; 

array.sort(function(a, b) { 

    var textA = a.obj3.toLowerCase(); 
    var textB = b.obj3.toLowerCase(); 

    if (textA < textB) 
     return -1; 
    if (textA > textB) 
     return 1; 
    return 0; 
}); 

そしてもちろんのには数値プロパティでソートすると、sim次のようになります。

array.sort(function(a, b) { 
    return a.obj1 - b.obj1; 
}); 
+1

ここで 'obj1'と' obj2'でソートしたいのですが? –

+0

@BrianGraham - 私は自分の答えに編集を加えました。 –

+1

ありがとうございます。また、 'obj3'を持つすべてのオブジェクトが 'hello'と同じであることがわかりましたか? –

4

オブジェクトプロパティに定義された順序はありません。彼らはソートすることはできません。配列には順序があります。特定の順序でキーが必要な場合は、それらを配列に配置して順序を定義する必要があります。

オブジェクトからすべてのプロパティ名(キーなど)を取得してソートし、必要に応じてその順序でプロパティを反復することができます。これを行うには、あなたはこのようにそれを行うだろう:あなたが見るように

var obj = { 
    obj1: 39, 
    obj2: 6, 
    obj3: 'text' 
    obj4: 'text' 
    obj5: 0 
}; 
var keys = []; 
for (var prop in obj) { 
    keys.push(prop); 
} 
keys.sort(); 
for (var i = 0; i < keys.length; i++) { 
    var key = keys[i]; 
    var value = obj[key]; 
    // do whatever you want to do with key and value 
} 

、これはキーのリストを取得し、ソートする余分な反復を必要とします。私はそれを回避する方法を知らない。キーを取得するには、obj.keys()の最新のブラウザで行うことができますが、内部的にはおそらくオブジェクトのプロパティを繰り返し実行するので、古いブラウザでも機能するようにシムが必要です。

関連する問題