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として出力されます。
-
【JavaScript】約数の2乗の合計が平方数(完全な平方)になる整数を範囲内から見つける方法
問題2つの整数 m と n を要素とする配列で範囲を受け取り、その範囲内から特定の条件を満たす整数をすべて見つける JavaScript 関数を作成します。条件とは、「ある整数の約数をすべて2乗し、その合計値がそれ自体平方数(完全な平方数)となっている」ことです。関数は配列の配列(サブ配列のリスト)を返します。各サブ配列には2つの要素が含まれます。1番目の要素:約数の2乗の合計が平方数となる整数2番目の要素:その整数の約数の2乗の合計値実装例以下が実際のコードです −const range = [1, 500]; const listSquared = ([m, n]) => { &nb
-
JavaScriptで配列を降順に並べ替えて隣接要素の差の合計を求める方法
問題 整数の配列を受け取るJavaScript関数を作成する必要があります。この関数は、配列を降順に並べ替えたうえで、隣り合う要素同士の差を順番に足し合わせ、その合計値を返すものです。 たとえば、次のような配列が渡された場合を考えてみましょう。 [6, 2, 15] この場合、期待される出力は次のとおりです。 (15 - 6) + (6 - 2) = 13 解決のアプローチ この問題は、以下の手順でシンプルに解くことができます。 sort()メソッドを使い、配列を降順(大きい順)に並べ替える。 隣接する2つの要素(i番目と i + 1 番目)の差を計算し、合計に加算していく。 配列の要素