5

私はオブジェクトを持っており{"5":"5","4":"4","3":"3","2":"2","1":"1","-1":"P1",-2":"P2"} 、この関数を使用して要素を解析します:

function floormake(inobj) {
    var levels = '';
    var obj = JSON.parse(inobj);
    levels += '<ul>';
    Object.keys(obj).sort(-1).forEach(function (key) {
        levels += '<li>' + obj[key] + '</li>';
    });
    levels += '</ul>';
    return levels;
}

しかし、結果は常に番号で並べ替えられます:-1、-2、1、2など。しかし、逆の並べ替えが必要です:5、4、3、2、1、sort(-1)-は機能しません

4

2 に答える 2

11

.reverse()代わりに使用することを検討してください。

Object.keys(obj).sort().reverse().forEach( ....

リバースドキュメンテーション

編集注: @Shmiddty で述べたように、reverse() メソッドは実際にはソートされません。配列をソートしてから逆にする必要があります。

于 2012-11-14T15:20:49.363 に答える
5

このArray.sortメソッドは、唯一のオプション パラメータとして整数を受け入れません。-10、またはを返す関数への参照を受け入れます。詳細については、 https1 : //developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/sort を参照してください。

数値に基づいてソートする方法の例を次に示します。

http://jsfiddle.net/3HFN5/1/

var a = ["5", "9", "1", "399", "23", "21"];

function sorter(b, c) {
    return (+b < +c ? 1 : -1);
}

alert(a.sort(sorter));

または、よりシンプルで優れたもの:

http://jsfiddle.net/3HFN5/2/

var a = ["5", "9", "1", "399", "23", "21"];

function sorter(b, c) {
    return c - b;
}

alert(a.sort(sorter));

そして、これを実際の例に組み込みます:

http://jsfiddle.net/3HFN5/3/

var a = {"2":"2","4":"4","-2":"P2","3":"3","300":"4","1":"1","5":"5","-1":"P1"};

function sorter(b, c) {
    return c - b;
}

alert(Object.keys(a).sort(sorter));

オブジェクト内のアイテムを混ぜ合わせて、正確に/完全にソートされていることを証明するために 1 つ追加しました。

于 2012-11-14T15:39:08.083 に答える