JavaScriptでflagがfalseの要素を配列の先頭に並べ替える方法
次のようなオブジェクトの配列があると仮定しましょう。
const arr = [
{flag: true, other: 1},
{flag: true, other: 2},
{flag: false, other: 3},
{flag: true, other: 4},
{flag: true, other: 5},
{flag: true, other: 6},
{flag: false, other: 7}
];この配列を受け取り、以下の条件に従って並べ替えるJavaScript関数を作成する必要があります。
arr.flag === falseの要素は配列の先頭側に配置されます。ただし、同じくfalseを持つ先行する要素よりも後ろに置かれます。条件に一致しない(
flag === trueの)要素は、元の順序を保ったまま残ります。出現順序は維持されることが重要です。
したがって、上記の配列の場合、期待される出力は次のようになります。
const output = [
{flag: false, other: 3},
{flag: false, other: 7},
{flag: true, other: 1},
{flag: true, other: 2},
{flag: true, other: 4},
{flag: true, other: 5},
{flag: true, other: 6}
];実装のポイント
この要件を実現するには、Array.prototype.sort() メソッドにカスタムの比較関数(コンパレータ)を渡すのが最もシンプルな方法です。比較関数では以下のロジックを使用します。
a.flagがfalseでb.flagがtrueの場合は -1 を返し、aを先に配置します。a.flagがtrueでb.flagがfalseの場合は 1 を返し、bを先に配置します。それ以外の場合は
otherプロパティの値で大小を比較し、元の相対的な順序をできるだけ維持します。
サンプルコード
実際のコードは次のとおりです。
const arr = [
{flag: true, other: 1},
{flag: true, other: 2},
{flag: false, other: 3},
{flag: true, other: 4},
{flag: true, other: 5},
{flag: true, other: 6},
{flag: false, other: 7}
];
const sortByFlag = arr => {
const sorter = (a, b) => {
if(!a['flag'] && b['flag']){
return -1;
 };
if(a['flag'] && !b['flag']){
return 1;
}
return a['other'] - b['other'];
}
arr.sort(sorter);
};
sortByFlag(arr);
console.log(arr);出力結果
コンソールには次のように出力されます。
[
{ flag: false, other: 3 },
{ flag: false, other: 7 },
{ flag: true, other: 1 },
{ flag: true, other: 2 },
{ flag: true, other: 4 },
{ flag: true, other: 5 },
{ flag: true, other: 6 }
]なお、ES2019以降の仕様では Array.prototype.sort() は安定ソート(stable sort)であることが保証されているため、比較結果が等しい要素同士は元の配列での相対的な順序が保持されます。これにより、「条件に一致しない要素は元の順序のまま」という要件も自然に満たされる仕組みになっています。
-
JavaScript DOMとは?基本の仕組みと要素の取得方法をわかりやすく解説
JavaScriptのDOM(Document Object Model:ドキュメントオブジェクトモデル)は、Webページ上のHTML要素を表現する仕組みです。DOMはインターフェースとして機能し、ページのコンテンツやスタイルを変更することで、Webページを自由に操作できるようにします。 DOMにアクセスするには、Webページ上で右クリックして「検証(Inspect)」を選択します。すると画面の右側または左側にパネルが表示され、現在閲覧しているページのHTML要素を確認できます。要素にマウスカーソルを合わせると、ページ上の該当部分がハイライトされるため、どの要素がページのどのセクションに対応
-
JavaScriptでキューに要素を追加する(エンキュー)方法
キューへの要素追加(エンキュー)とは キューに要素を追加すること(エンキュー)とは、コンテナ配列の末尾に新しい要素を加える操作です。本記事では、配列の末尾をキューの「尾部(tail)」として扱い、すべての挿入操作をこの末尾に対して行います。つまり、先入れ先出し(FIFO)の構造において、新しく入ってくる要素は常に列の最後尾へ並ぶことになります。 この考え方に基づけば、enqueue 関数は次のようにシンプルに実装できます。 実装例:enqueue関数 enqueue(element) { // キューが満杯かどうかをチェック if (this.isFull()) {