1

私はJavaScriptで次の連想配列を持っています...

opt_array["wta"] = 23;
opt_array["cdp"] = 54;
opt_array["cdm"] = 54;
opt_array["ppv"] = 44;

値(降順)でソートしてから、キー(特定の順序)でソートする必要があります。たとえば、上記の例では、54,54,44,23 を出力し、同点の場合はこの順序でキーを配置する必要があります。wta、cdp、cdm、ppv。

したがって、返される配列は...

opt_array["cdp"] = 54;
opt_array["cdm"] = 54;
opt_array["ppv"] = 44;
opt_array["wta"] = 23;

ありがとう

4

4 に答える 4

7

配列としてではなくopt_array、オブジェクトとして使用しています。

オブジェクトのプロパティは JavaScript では順不同であり、特定の順序で配置することはできません。

唯一の時間順序は、配列を配列として使用し、数値文字列である配列「インデックス」を使用している場合です。(はい、本当に. 数値として書きがちですが、実際にはプロパティ名であり、プロパティ名は常に文字列です。)

すべてのプロパティ名をopt_array配列として取得し、並べ替えてからループして出力を生成できます。例えば:

var index;
var names = Object.keys(opt_array);
names.sort();
for (index = 0; index < names.length; ++index) {
    console.log(names[index] + ": " + opt_array[names[index]]);
}

(それはObject.keys、すべてのブラウザーに存在しないES5機能である を使用します。以前のブラウザー用にシムすることができます。)

または、必要に応じて、オブジェクトの配列を持ち、それらのオブジェクトのプロパティで配列を並べ替えることができます。

opt_array = [
    {key: "wta", value: 23},
    {key: "cdp", value: 54},
    {key: "cdm", value: 54},
    {key: "ppv", value: 44}
];
opt_array.sort(function(a, b) {
    var rv;

    if (a.key < b.key) {
       rv = -1;
    }
    else if (a.key > b.key) {
       rv = 1;
    }
    else {
       rv = 0;
    }
    return rv;
});

しかし、それはあなたが何のために使用していても役に立たないかもしれませんopt_array.

于 2013-03-12T16:12:56.787 に答える
3

JavaScript には連想配列のようなものはありません。あなたが持っているのはオブジェクトです。

オブジェクトには順序がありません。キーを設定する順序に関係なく、適切と思われる方法でキーを配置します。したがって、それらを並べ替えることができません。

于 2013-03-12T16:13:18.903 に答える
0

Object.keysを使用して、ソートされたキーの配列を取得できます

var sortedKeys = Object.keys(opt_array).sort();

for(var i = 0; i < sortedKeys.length; i++){
    console.log("opt_array['" + sortedKeys[i] +"'] = "+ opt_array[sortedKeys[i]]+ ";");
}

出力:

opt_array['cdm'] = 54;
opt_array['cdp'] = 54;
opt_array['ppv'] = 44;
opt_array['wta'] = 23;
于 2013-03-12T16:24:25.367 に答える
0

ブライアン:

Javascript 関数は、配列を処理するには十分に強力でない場合があります。

私はこのjavascriptライブラリPHPJSを使用しました:

JavaScript によるソート: http://phpjs.org/functions/asort/

幸運を!!!

于 2013-03-12T16:46:39.570 に答える