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

JavaScriptで配列の偶数を2乗・奇数を平方根に変換して合計を求める方法


問題

数値の配列を受け取るJavaScript関数を作成する必要があります。この関数は、配列内の各数値に対して「偶数であれば2乗」「奇数であれば平方根」を求め、それらすべての合計を小数点以下2桁に丸めて返します。

解決のアプローチ

この問題は、Array.prototype.map()Array.prototype.reduce()を組み合わせると簡潔に実装できます。まずmap()で各要素を変換した新しい配列を作り、続いてreduce()でその配列の合計を計算します。最後にMath.round()を使って小数点以下2桁に丸めます。

コード例

以下が実際のコードです −

const arr = [45, 2, 13, 5, 14, 1, 20];

const squareAndRootSum = (arr = []) => {
   // 偶数は2乗、奇数は平方根に変換
   const res = arr.map(el => {
      if (el % 2 === 0) {
         return el * el;
      } else {
         return Math.sqrt(el);
      }
   });
   // 変換後の値をすべて合計
   const sum = res.reduce((acc, val) => acc + val);
   // 小数点以下2桁に丸めて返す
   return Math.round(sum * 100) / 100;
};

console.log(squareAndRootSum(arr));

コードのポイント

  • map(): 元の配列を変更することなく、各要素を変換した新しい配列を生成します。
  • el % 2 === 0: 剰余演算子で偶数かどうかを判定します。偶数ならel * el(2乗)、奇数ならMath.sqrt(el)(平方根)を返します。
  • reduce(): アキュムレータ(acc)に各要素(val)を順番に加算し、配列全体の合計を求めます。
  • Math.round(sum * 100) / 100: 一度100倍してから四捨五入し、再度100で割ることで小数点以下2桁に丸めています。

より簡潔な書き方(三項演算子)

三項演算子と初期値0を指定したreduce()を使えば、1つの処理にまとめて記述できます。初期値を渡しておくと空の配列が渡された場合でもエラーにならず安全です。

const squareAndRootSum = (arr = []) => {
   const sum = arr.reduce(
      (acc, el) => acc + (el % 2 === 0 ? el * el : Math.sqrt(el)),
      0
   );
   return Math.round(sum * 100) / 100;
};

出力結果

コンソールには以下のように表示されます。

613.55

検算してみましょう。45→√45≈6.71、2→4、13→√13≈3.61、5→√5≈2.24、14→196、1→1、20→400 となり、これらの合計は約613.5498…です。これが小数点以下2桁に丸められ、613.55として出力されます。

  1. 【JavaScript】約数の2乗の合計が平方数(完全な平方)になる整数を範囲内から見つける方法

    問題2つの整数 m と n を要素とする配列で範囲を受け取り、その範囲内から特定の条件を満たす整数をすべて見つける JavaScript 関数を作成します。条件とは、「ある整数の約数をすべて2乗し、その合計値がそれ自体平方数(完全な平方数)となっている」ことです。関数は配列の配列(サブ配列のリスト)を返します。各サブ配列には2つの要素が含まれます。1番目の要素:約数の2乗の合計が平方数となる整数2番目の要素:その整数の約数の2乗の合計値実装例以下が実際のコードです −const range = [1, 500]; const listSquared = ([m, n]) => { &nb

  2. JavaScriptで配列を降順に並べ替えて隣接要素の差の合計を求める方法

    問題 整数の配列を受け取るJavaScript関数を作成する必要があります。この関数は、配列を降順に並べ替えたうえで、隣り合う要素同士の差を順番に足し合わせ、その合計値を返すものです。 たとえば、次のような配列が渡された場合を考えてみましょう。 [6, 2, 15] この場合、期待される出力は次のとおりです。 (15 - 6) + (6 - 2) = 13 解決のアプローチ この問題は、以下の手順でシンプルに解くことができます。 sort()メソッドを使い、配列を降順(大きい順)に並べ替える。 隣接する2つの要素(i番目と i + 1 番目)の差を計算し、合計に加算していく。 配列の要素