JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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 ]

条件(三項)演算子と組み合わせることで、ループや一時的な配列を明示的に用意する必要がなくなり、意図もひと目で分かりやすくなります。用途に応じて使い分けるとよいでしょう。

  1. 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

  2. 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番目の要素(