JavaScriptで配列から最小値を検索して削除する方法
本記事では、数値の配列を受け取り、その中から最小の要素を見つけて、元の配列を直接変更する形で削除するJavaScript関数の実装方法を解説します。
実装コード
まずは実際のコードを見てみましょう。
const arr = [2, 1, 3, 2, 4, 5, 1];
const removeSmallest = arr => {
const smallestCreds = arr.reduce((acc, val, index) => {
let { num, ind } = acc;
if(val >= num){
return acc;
};
ind = index;
num = val;
return { ind, num };
}, {
num: Infinity,
ind: -1
});
const { ind } = smallestCreds;
if(ind === -1){
return;
};
arr.splice(ind, 1);
};
removeSmallest(arr);
console.log(arr);
コンソールへの出力結果は次のとおりです。
[ 2, 3, 2, 4, 5, 1 ]
コードの解説
reduceで最小値とそのインデックスを追跡
この関数では、reduceメソッドを使って配列を一度だけ走査し、最小値の「値(num)」と「インデックス(ind)」を同時に追跡しています。
初期アキュムレータとして num: Infinity と ind: -1 を設定しているのがポイントです。Infinityを初期値にすることで、どんな数値の配列でも最初の要素より大きいため、必ず比較処理が行われます。また、空の配列が渡された場合には ind が -1 のままになるため、後段のチェックによって安全に処理を終了できる仕組みになっています。
spliceで元の配列から削除
最小値のインデックスが特定できたら、splice(ind, 1) を使ってその位置の要素を1つだけ削除します。mapやfilterのように新しい配列を作るのではなく、元の配列を直接変更する(破壊的な)処理である点に注意してください。「in place(元の場所で)」という要件を満たすためにこの手法を採用しています。
なお、配列内に同じ最小値が複数存在する場合、このコードでは最も先頭に近いものが削除されます。これは、reduce内の条件が val >= num のときに更新を行わない、つまり等しい値では置き換えないようになっているためです。
-
JavaScriptで配列の3番目に小さい数値を求める方法
問題の概要JavaScriptの関数を作成する必要があります。この関数は、長さが3以上の数値配列を引数として受け取ります。そして、その配列の中から3番目に小さい数値を返すことが求められます。解決アプローチこの問題は、以下の手順で解くことができます。元の配列を破壊しないように、slice()メソッドでコピーを作成します。ループを使って、最小値を2回取り除きます。Math.min(...copy)で最小値を見つけ、indexOf()でその位置を特定し、splice()で削除します。残ったコピー配列の最小値が、元の配列の3番目に小さい数値となります。サンプルコード以下は実際のコード例です。const
-
JavaScriptで配列から三角形を作れる組み合わせの数を数える方法
問題 数値の配列 arr を第一引数(唯一の引数)として受け取る JavaScript 関数を作成します。 この関数の目的は、配列から選んだ3つの数値を三角形の3辺としたときに、実際に三角形が成立する組み合わせ(三つ組)の総数を数えることです。 たとえば、関数への入力が次のようだった場合: const arr = [2, 2, 3, 4]; 期待される出力は次のとおりです。 const output = 3; 出力の解説 有効な組み合わせは以下の3通りです。 2,3,4(1つ目の2を使用) 2,3,4(2つ目の2を使用) 2,2,3 三角形の成立条件 3つの辺 a、b、c(a ≤ b ≤ c