JavaScriptで配列の要素をすべて奇数に変換する方法
問題
配列を受け取り、その各要素を次のルールに従って変換するJavaScript関数を作成することを考えます。
- 数値が奇数の場合 → そのままの値を保持する
- 数値が偶数の場合 → 1を引いて奇数に変換する
そして最後に、変換後の新しい配列を返します。
コード例
以下が実際のコードです。
const arr = [5, 23, 6, 3, 66, 12, 8];
const reduceToOdd = (arr = []) => {
const res = [];
for(let i = 0; i < arr.length; i++){
const el = arr[i];
if(el % 2 === 1){
res.push(el);
}else{
res.push(el - 1);
 };
};
return res;
};
console.log(reduceToOdd(arr));
出力結果
コンソールには次のように出力されます。
[ 5, 23, 5, 3, 65, 11, 7 ]
コードの解説
この関数では、剰余演算子(%)を使って各要素の偶奇を判定しています。数値を2で割った余りが1であれば奇数なのでそのまま新しい配列に追加し、それ以外は偶数として1を引いた値を追加します。元の配列を直接書き換えずに新しい配列を生成して返すため、副作用のない安全な実装になっている点もポイントです。
map()を使ったより簡潔な書き方
Array.prototype.map()を活用すれば、同じ処理をさらに短く記述できます。
const reduceToOdd = (arr = []) => arr.map(el => el % 2 === 1 ? el : el - 1); console.log(reduceToOdd([5, 23, 6, 3, 66, 12, 8])); // [ 5, 23, 5, 3, 65, 11, 7 ]
条件(三項)演算子と組み合わせることで、ループや一時的な配列を明示的に用意する必要がなくなり、意図もひと目で分かりやすくなります。用途に応じて使い分けるとよいでしょう。
-
JavaScriptで配列内の正の数だけを合計する方法
問題正と負の数値が混在した配列を受け取り、その中に含まれる正の数すべての合計を計算して返すJavaScript関数を作成する必要があります。たとえば、[5, -5, -3, -5, -7, -8, 1, 9] という配列が与えられた場合、正の数は 5、1、9 の3つなので、期待される出力は 15 となります。解決コード以下がその実装例です。const arr = [5, -5, -3, -5, -7, -8, 1, 9]; const sumPositives = (arr = []) => { const isPositive = num => type
-
JavaScriptで複数の配列から要素を交互に取り出して1つの配列にまとめる方法
問題 今回は、任意の個数の配列を引数として受け取り、それらすべての配列から要素を交互に(順番に一つずつ)取り出して、新しい配列を組み立てるJavaScript関数を作成します。 例えば、関数への入力が次のような場合を考えてみましょう。 入力 const arr1 = [1, 2, 3, 4]; const arr2 = [11, 12, 13, 14]; const arr3 = [a, b, c]; 出力 const output = [1, 11, a, 2, 12, b, 3, 13, c, 4, 14]; ご覧のとおり、まず各配列の先頭要素(1、11、a)、次に各配列の2番目の要素(