値の2以上のすべての要素を配列の最後に移動して、整数の配列を並べ替える必要があります。しかし、私が2以上の2つの要素を比較している場合、あるいは両方が2未満の要素を比較している場合、それらを現在の順序で保持したいと考えています。私はネイティブ.sort()
と、次の比較関数を使用しています:JS内の一意のネイティブArray.sort()動作
function customSort(a, b) {
return (a >= 2 && b < 2) ? 1 : -1;
}
次のような場合のために意図したとおりに動作するようです:
[2, 3, 2, 0] => [0, 2, 3, 2]
[2, 3, 2, 0, 0, 0, 1, 0, 0, 0] => [0, 0, 0, 1, 0, 0, 0, 2, 3, 2]
しかし、私は過去10個の要素を得れば、それはのように見える、それはランダムに2未満である要素、及び2以上の要素を注文すると思われる:
[2, 3, 2, 0, 0, 0, 1, 0, 0, 0, 0] => [0, 0, 0, 0, 0, 1, 0, 0, 3, 2, 2]
(expected result) => [0, 0, 0, 1, 0, 0, 0, 0, 2, 3, 2]
Iは三元オペラで-1
を仮定torは常に左の要素を残しておき、順序を保持します(0
とは対照的に、ランダムに順序を決めます)。 .sort()
ネイティブを使わずに並べ替えるのが良い方法があることは分かっていますが、私はその動作について興味があり、何らかの方法があればネイティブ.sort()
で正しく動作するように比較関数を変更できます。
"ネイティブ"と呼ばれるものは、実際には内蔵されています([*組み込み関数*](http://www.ecma-international.org/ecma-262/6.0/#sec-built-in-関数)または[*組み込みメソッド*](http://www.ecma-international.org/ecma-262/6.0/#sec-built-in-method))。 ECMAScript 2015以前は、[*ネイティブオブジェクト*](http://www.ecma-international.org/ecma-262/5.1/#sec-4.3。6)(関数とメソッドを含む)は、あなたがjavascriptで書くかもしれないものでしたが、この用語は最新の仕様で[*通常のオブジェクト*](http://www.ecma-international.org/ecma -262/6.0 /#sec-ordinary-object)である。 ;-) – RobG
@RobGありがとう、私はあまりにも正しい言葉が何であるかは分かりませんが、知っておいてよかったです! –
これは問題ありません。現時点では、言語仕様は非常に速く変化しています。 – RobG