1. ホーム
  2. javascript

[解決済み] 数値の配列の和の求め方

2022-02-14 01:52:02

質問内容

ある配列が与えられたとき [1, 2, 3, 4] その要素の合計を求めるにはどうしたらよいでしょうか?(この場合、和は 10 .)

と思ったら $.each は便利かもしれませんが、どのように実装すればいいのかわかりません。

どのように解決するのですか?

推奨値(デフォルト値で削減)

Array.prototype.reduce を使用すると、配列を繰り返し処理し、現在の要素の値を以前の要素の値の合計に加えることができます。

console.log(
  [1, 2, 3, 4].reduce((a, b) => a + b, 0)
)
console.log(
  [].reduce((a, b) => a + b, 0)
)

デフォルト値なし

TypeErrorが発生します。

console.log(
  [].reduce((a, b) => a + b)
)

ES6の矢印関数以前

console.log(
  [1,2,3].reduce(function(acc, val) { return acc + val; }, 0)
)

console.log(
  [].reduce(function(acc, val) { return acc + val; }, 0)
)

数字以外の入力

数字以外が入力可能な場合、その処理をしたい場合がありますよね?

console.log(
  ["hi", 1, 2, "frog"].reduce((a, b) => a + b)
)

let numOr0 = n => isNaN(n) ? 0 : n

console.log(
  ["hi", 1, 2, "frog"].reduce((a, b) => 
    numOr0(a) + numOr0(b))
)

非推奨 危険 評価使用

を使用することができます。 評価 を使えば、JavaScriptのコードを文字列で表現して実行することができます。Array.prototype.join関数を使って配列を文字列に変換すると、[1,2,3]が"1+2+3"に変わり、6と評価されます。

console.log(
  eval([1,2,3].join('+'))
)

//This way is dangerous if the array is built
// from user input as it may be exploited eg: 

eval([1,"2;alert('Malicious code!')"].join('+'))

もちろん、アラートを表示することが最悪の事態というわけではありません。ただ、Ortundさんの質問が明確でなかったようなので、その回答として記載しました。