2

以下の例を試しましたが、現在は正しい情報で作業しています。

var fruits = [110.111, 1245.22222, 2.458, 0.001];
fruits.sort();
document.write(fruits);

結果 :

0.001,110.111,1245.22222,2.458

しかし、私はこのようなものが欲しい

0.001,2.458,110..111,1245.22222

このコードの何が問題なのですか?

4

4 に答える 4

7

array.sort( [compareFunction] )は、カスタムコンパレータとして機能するオプションの関数を取ります

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

降順に並べ替えたい場合

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

経由: MDN Array.prototype.sort docs

  • compareFunction(a, b)が 0 未満の場合、a を b よりも小さいインデックスに並べ替えます。つまり、a が最初になります。
  • 0 を返す場合compareFunction(a, b)、a と b は互いに変更されませんが、すべての異なる要素に関してソートされます。注: ECMAscript 標準はこの動作を保証していないため、すべてのブラウザー (たとえば、少なくとも 2003 年までさかのぼる Mozilla バージョン) がこれを尊重しているわけではありません。
  • compareFunction(a, b)が 0 より大きい場合、b を a よりも小さいインデックスに並べ替えます。
  • compareFunction(a, b)要素 a と b の特定のペアを 2 つの引数として指定すると、常に同じ値を返す必要があります。一貫性のない結果が返された場合、ソート順は未定義です

最近、私はいくつかの関数型プログラミングを行っています。このセクションは、同じ問題を別の方法で解決したい人のための別の選択肢として残しておきます。

まず、いくつかの一般的なユーティリティ関数があります。ascこれらは、高次関数とdescソート関数を定義するときに必要になります。

const sub = x => y => y - x;
const flip = f => x => y => f (y) (x);
const uncurry = f => (x,y) => f (x) (y);
const sort = f => xs => xs.sort(uncurry (f));

と を簡単に定義できるようにascなりdescましたsub

const asc = sort (flip (sub));
const desc = sort (sub);

見てみな

asc ([4,3,1,2]);  //=> [1,2,3,4]
desc ([4,3,1,2]); //=> [4,3,2,1]

あなたはまだ使用してカスタムソートを行うことができますsort (comparator) (someData)

// sort someData by `name` property in ascending order
sort ((a,b) => a.name - b.name) (someData); //=> ...
于 2013-08-19T06:04:30.957 に答える
2

次のようなカスタムソート関数を使用できます。

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

Array.sort()メソッドは数値を文字列として扱い、メンバーを ASCII 順に並べます。

于 2013-08-19T06:03:54.687 に答える
1

並べ替え関数を定義できます。

fruits.sort(function(a,b) {return a>b})
于 2013-08-19T06:03:56.897 に答える