11

重複の可能性:
連想配列をJavascriptの値で並べ替える方法は?

したがって、最初に、技術的にはJavascriptに連想配列がないことを知っていますが、タイトルを付けて正しいアイデアを伝える方法がわかりませんでした。

これが私が持っているコードです、

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

そして、後でループするときにROB最初に、次にBOB、などになるように、値で並べ替えたいと思います。

私はもう試した、

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

しかし、それらのどれも実際には何もしていないようです。

アレイをコンソールに出力する前後で、同じ順序で配列が出力されます。

4

4 に答える 4

25

配列は数値インデックスのみを持つことができます。これをオブジェクトまたはオブジェクトの配列として書き直す必要があります。

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;
});
于 2012-10-08T19:23:42.817 に答える
3

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

したがって、これを行うには、データ構造を少し変更する必要があります。

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);

ここに画像の説明を入力してください

于 2012-10-08T19:29:14.290 に答える
2

最初-マッピングとして使用する配列を作成するのは正しくありません。代わりにオブジェクトを使用してください:

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

配列は、数値シーケンシャルインデックスを処理するロジックを備えたクラスです。

今、あなたの応答に答えます、マッピングには順序がありません、それが繰り返される順序についての保証はありませんので、「マッピングのソート」のようなものはありません

キー、値を持つオブジェクトで配列を使用することをお勧めします。

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

または2つのアレイ:

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

それはあなたのニーズ次第です。

于 2012-10-08T19:26:31.677 に答える
1

配列内でJavaScriptオブジェクトを使用する必要があります: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;
    });
于 2012-10-08T19:27:07.357 に答える