2011-12-07 72 views
7

テーブルに格納されたデータに基づいてJSONオブジェクトを生成しました。私は別の方法でそれを並べ替えることができるようにする必要がありますが、私はJSON.stringify(array)を実行し、そこからソートしようとすると動作しません。 array.sort();をしようとすると、順序が変わりますが、最終的には機能しません。私はJSONの使用経験がなく、操作方法がわからないので、他に何を試していいのか分かりません。それをソートした後、アルファベット順に選択したカテゴリのテーブルを書き直す必要があります。JSONをアルファベット順に並べ替え

var arr = [{ 
"Functional Category":"T-Shirt", 
"Brand Name":"threadless", 
"When Obtained":"Last 3 Months", 
"How Obtained":"Purchased", 
"How Often Worn":"Monthly", 
"Where It's Made":"India", 
"Has a Graphic":"Yes"}] 

は、私がここにフィドルの設定があります:http://jsfiddle.net/Skooljester/88HVZ/1/を、私はhere示唆されたものを試みたが、それを動作させることができなかったしている

JSONは次のようになります。

私には2つの質問があります.1つは、これを達成するにはどうすればいいのですか?2つは、並べ替えを行うためのよりよい方法ですか?

+4

次の時間に質問に関連コードを含めてください。 jsFiddleがダウンした場合(時には)、あなたの質問は不完全です。 –

答えて

6

まず、比較関数を定義する:

function compare(el1, el2, index) { 
    return el1[index] == el2[index] ? 0 : (el1[index] < el2[index] ? -1 : 1); 
} 

そして、この使用、最初のカラムに配列をソートする:

array.sort(function(el1,el2){ 
    return compare(el1, el2, "Functional Category") 
}); 

あるいは、最初の列AZでソートすると、そして最初の列が等しい場合は第2列ZAに:

array.sort(function(el1,el2){ 
    var compared = compare(el1, el2, "Functional Category") 
    return compared == 0 ? -compare(el1, el2, "Brand Name") : compared; 
}); 
+0

これは素晴らしい動作します。私は印刷するのに問題が発生したが解決した。見た:http://jsfiddle.net/Skooljester/agcUk/3/ありがとうございました! –

+1

ええ、以前のjsfiddleを使ってテストしました。http://jsfiddle.net/88HVZ/7/を参照してください。 – Bart

5

Mozilla開発者向けドキュメントには、ソート機能の説明があります。ブラウザーにソートの仕方を指示するパラメーターとして関数を提供することができます。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/sort

myArray.sortコールとそのリンクからいくつかの擬似コードは、追加され、関数名が削除さ:

myArray.sort(function(a, b) { 
    if (a is less than b by some ordering criterion) 
    return -1; 
    if (a is greater than b by the ordering criterion) 
    return 1; 
    // a must be equal to b 
    return 0; 
}); 

EDIT:あなたが持つ単一要素の配列を持っているように見えます要素としてのオブジェクトオブジェクトは順序付けられていません。並べ替えるには、配列に変換する必要があります。 (古いブラウザ用augment.jsによって追加Object.keysとArray.prototype.map機能付き)、これを試してみてください:

[["Brand Name","threadless"], 
["Function Category","T-Shirt"], 
... 
] 
+0

私はそれを見ましたが、それを実装する方法を理解することができませんでした。 –

2

:これはあなたにフォームの並べ替え、ネストされた配列を与える

var result = Object.keys(myArray[0]).sort().map(function(key) { 
    return [key,myArray[0][key]]; 
}); 

この種の何かが助けになるかもしれません:

 
function (obj) { 
    var a = [],x; 
    for(x in obj){ 
    if(obj.hasOwnProperty(x)){ 
     a.push([x,obj[x]]); 
    } 
    } 
    a.sort(function(a,b){ return a[0]>b[0]?1:-1; }) 
    return a; 
} 

6

はコードの下に表示さ....

function sortObject(o) { 
    var sorted = {}, 
    key, a = []; 

    for (key in o) { 
     if (o.hasOwnProperty(key)) { 
       a.push(key); 
     } 
    } 

    a.sort(); 

    for (key = 0; key < a.length; key++) { 
     sorted[a[key]] = o[a[key]]; 
    } 
    return sorted; 
} 

これは役に立ちますか?

+0

私の経験はなさそうですが、コードを実装しようとすると、期待どおりに動作しませんhttp://jsfiddle.net/Skooljester/WtDTD/1/ –

+1

これはV8の数字キーのために打ち切られます:http:// code.google.com/p/v8/issues/detail?id=164 –

+0

@MANISH LANGA、+1素晴らしい機能!私の意見では、これは正解になります。 :-) –

1

ユーザがテーブルを動的にソートできるようにする場合は、私のやり方が多少異なる場合があります。

多くのjQueryテーブルソートプラグインがあります。

あなたとあなたのテーブルを構築することができますこの方法...などなどhttp://tablesorter.com/docs/

できます複数列のソート、デフォルトのソート、イベントへのワイヤーまで、...:私はこの1つはとの良好な成功を収めています既にあり、ページ出力の前であってもセカンダリを行うことができます。

+0

これは正しい意図です。しかし、私はまだjavascript/jQueryを学んでいるので、プラグインを使わずに並べ替えようとしています。 –

関連する問題