JavaScriptで配列内の重複しない要素の合計を求める方法
問題の概要
まず、次のような数値の配列を想定してみましょう。
const arr = [1, 5, 2, 1, 2, 3, 4, 5, 7, 8, 7, 1];
この配列を受け取り、重複を除外した個別の要素(ユニークな値)の合計を計算するJavaScript関数を作成します。
上記の配列の場合、重複を除いた要素は「1, 5, 2, 3, 4, 7, 8」となるため、出力は次のようになります。
30
実装コード
この問題を解くコードは以下のとおりです。
const arr = [1, 5, 2, 1, 2, 3, 4, 5, 7, 8, 7, 1];
const distinctSum = arr => {
let res = 0;
for(let i = 0; i < arr.length; i++){
if(i === arr.lastIndexOf(arr[i])){
res += arr[i];
};
continue;
};
return res;
};
console.log(distinctSum(arr));コードの解説
この関数の仕組みは以下のとおりです。
- 配列の各要素について、
lastIndexOf()で得られる「その値が最後に出現するインデックス」と現在のインデックスを比較します。 - 両者が一致した場合にのみ値を合計へ加算するため、各ユニークな値は必ず1回だけカウントされます。
- すべての要素を走査し終えた時点で、合計値を返します。
実行結果
コンソールには次の出力が表示されます。
30
別のアプローチ:Setを使った簡潔な書き方
Setオブジェクトを利用すると、重複の除去をより簡単に行えます。
const distinctSum = arr => {
const unique = [...new Set(arr)];
return unique.reduce((sum, num) => sum + num, 0);
};
console.log(distinctSum(arr)); // 30Setは重複する値を自動的に排除するため、スプレッド構文で配列に戻し、reduce()で合計を求めるだけで実装できます。コードの意図が明確になり、可読性も向上します。
-
JavaScriptで配列の合計値が偶数か奇数かを判定する方法
本記事では、配列内の全要素の合計を求め、その結果が偶数か奇数かに応じて文字列を返すJavaScript関数の実装方法を解説します。 問題 整数の配列 arr を引数として受け取るJavaScript関数を作成する必要があります。この関数は、配列内のすべての要素の合計が奇数であれば文字列「odd」を、偶数であれば文字列「even」を返すようにします。 解決のアプローチ まず、配列メソッドの reduce() を使って配列全体の合計値を算出します。次に、合計値を 2 で割った余り(剰余演算子 % の結果)が 0 かどうかをチェックすることで、偶数・奇数の判定を行います。 コード例 以下が実際のコ
-
JavaScriptで2次元配列の要素を交互に加減算して合計を求める方法
問題の概要行数と列数が同じ m × n の2次元配列(数値の行列)を受け取り、次の式で表される合計値を計算して返すJavaScript関数を作成します。$\sum_{i=1}^m \sum_{j=1}^n (-1)^{i+j}a_{ij}$この式が意味するのは、各要素に対して「インデックス i + j の偶奇」に応じて符号を切り替えるということです。具体的には、(i + j) が偶数である要素は正の符号で加算し、奇数である要素は負の符号で減算します。チェス盤のように市松模様状にプラスとマイナスが交互に並ぶイメージです。計算イメージ0始まりのインデックスで考えると、左上の要素 (0, 0) は