2012-10-08 3 views
6

可能性の重複:だから最初のオフ、私は技術的にはJavascriptが連想配列を持っていないけど、私は確認されませんでした
How to sort an associative array by its values in Javascript?(アソシエーティブ)配列を値でソートする方法は?

どのタイトルにそれをし、全体で右のアイデアを得るために。だからここ

は私が持っているコードは、ある

var status = new Array(); 
status['BOB'] = 10 
status['TOM'] = 3 
status['ROB'] = 22 
status['JON'] = 7 

そして私は、そのような私はそれをループ後でROBBOB、その後、最初に来たとき、その値によって、それをソートしたい、など

I試しました、

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

しかし、実際には何もしていないようです。

結果が同じ順序で出てくる前と後に、アレイをコンソールに出力します。

+4

。配列ではテンキーのみを使用します。 '.sort'は厳密にはあなたの配列には要素がないので何もしません。この場合、オブジェクトを使用する必要があります。私は[MDN - オブジェクトを使った作業](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects)を読むことをお勧めします。 –

+2

また、[プロパティ値によるJavaScriptオブジェクトの並べ替え](http://stackoverflow.com/questions/1069666/sorting-javascript-object-by-property-value)。 –

+0

以下の解決策は、複製としてマークされていますが、複製には記載されていません。 – PopeJohnPaulII

答えて

21

配列には数値インデックスしか含めることができません。これをオブジェクトまたはオブジェクトの配列として書き直す必要があります。

var status = new Object(); 
status['BOB'] = 10 
status['TOM'] = 3 
status['ROB'] = 22 
status['JON'] = 7 

または

var status = new Array(); 
status.push({name: 'BOB', val: 10}); 
status.push({name: 'TOM', val: 3}); 
status.push({name: 'ROB', val: 22}); 
status.push({name: 'JON', val: 7}); 

あなたは status.pushメソッドを好きなら、あなたがそれを並べ替えることができます。

status.sort(function(a,b) { 
    return a.val - b.val; 
}); 
+0

私はこの(配列)アプローチが好きですが、 'val'で呼び出してソートする正しい方法は何でしょうか? – PopeJohnPaulII

+0

オブジェクトの配列で 'val'によるソートを含むように私の答えを更新しました。 – saml

+0

グレート&シンプルなソリューション。 – Ahsan

2

ファースト - それはマッピングとしてそれを使用する配列を作成するために正しくないです。代わりにObjectを使用してください:

var status = {}; 
status['BOB'] = 10; 

この配列は、数値順次インデックスを処理するロジックを持つクラスです。

今、あなたの応答に答える、マッピングは、それはので、私はあなたが持つオブジェクトの配列を使用するsugest

「マッピングを仕分け」のようなものは存在しない反復されます順序についての保証はありません、何の秩序を持っていませんキー、値:

var status = []; 
status.push({ key: 'BOB', value: 10 }); 

または二つの配列:

var status = { 
    keys: [], 
    values: [] 
}; 
status.keys.push('BOB'); 
status.value.push(10); 

それはあなたのニーズ次第です。あなたはアレイ内のJavaScriptのオブジェクトを使用する必要があります

1

jsfidle

 var status = new Array(); 
    status.push({key: 'BOB', value: 10}); 
    status.push({key: 'TOM', value: 3}); 
    status.push({key: 'ROB', value: 22}); 
    status.push({key: 'JON', value: 7}); 
    status.sort(function(a, b){ 

     if(a.value > b.value){ 
     return -1; 
     } 
     else if(a.value < b.value){ 
     return 1; 
     } 
     return 0; 
    }); 
+0

これは文字列の比較に適しています – cw24

2

"配列" はJavaScriptには数値添字です。 「オブジェクト」は、連想配列と呼ばれるものです。 「オブジェクト」は本質的に順序付けられていません。

これを行うには、データ構造を少し変更する必要があります。JSアレイの間違った使用である

var arr = []; // Array 

// push a few objects to the array. 
arr.push({name: 'BOB', age: 10}); 
arr.push({name: 'TOM', age: 3}); 
arr.push({name: 'ROB', age: 22}); 
arr.push({name: 'JON', age: 7}); 

var sorted = arr.sort(function(a, b) { 
    return a.age - b.age; 
}); 

console.log(sorted); 

enter image description here

+0

名前で並べ替える方法は? –

関連する問題