1

いくつかのアクションをトリガーするコードがあります。その前に、重みを並べ替えるだけです。weight.sort()whereweightは空でない配列、たとえばを使用するとすべてがうまく機能します[10 20 30 40]が、それを次のように変更すると:

weight.sort(function(a,b) {
    return a - b;
});

アクションの 1 つが無効です (div を表示します)。正直なところ、何が違いを生むのかわかりません。weight両方の方法で並べ替えた後も同じであり、そのコードを明確に変更するとスクリプトが機能するかどうかが変わるため、私には奇妙に思えます。FireBug にエラーはありません。

4

3 に答える 3

2

もしあなたがそうするなら

weight = weight.sort

項目は、辞書式比較を使用してソートされます。=> 2 > 10

しかし、あなたがするとき

weight = weight.sort(function(a,b) { return a - b; });

項目は、文字列ではなく数値として比較され、リストは昇順で並べ替えられます。=> 2 < 10

また、

weight = weight.sort(function(a,b){return b-a});

降順でソートします。

于 2013-01-11T15:51:42.537 に答える
1

通常、この種の並べ替えを使用して、ある種のカスタム比較を実装します。この場合、呼び出すだけの唯一の違いsortは要素の順序です。表示するコードを使用すると、配列は通常の昇順ではなく降順 (大きな値から小さな値) にソートされます。

引数なしの並べ替えはb-a、符号が異なる ab の代わりに返されるため、比較が逆になることに注意してください。

于 2013-01-11T15:58:54.863 に答える
1

Array.prototype.sortカスタムソート機能を使用しない場合、アイテムは辞書順でソートされます。

カスタム関数を定義して、任意のプロパティを使用して任意のタイプの項目を並べ替えることができます。比較結果に基づいて、関数が負/正の数値または 0 を返すことを確認してください。たとえばname、名前に基づいてプロパティを持つオブジェクトを並べ替えるには、次を使用できます。

items.sort(function (a, b) {
    return a.name.localeCompare(b.name);
});

または、項目をpriorityプロパティ (番号) で並べ替えるには:

items.sort(function (a, b) {
    return a.priority - b.priority;
});

カスタム ソーターでは、好きなだけプロパティを比較できます。また、未定義のアイテムやアイテムのプロパティを適切に処理するようにしてください。強化された名前によるソートの例:

items.sort(function (a, b) {
    var aName = a && a.name || "",
        bName = b && b.name || "";
    return aName.localeCompare(bName);
});
于 2013-01-11T16:05:08.907 に答える