javascript set内の合計値を取得する

javascript set内の合計値を取得する

javascriptで、set内の合計値を取得するサンプルコードを記述してます。「forEach」を使用すれば求めることが可能です。文字列が含まれている場合は、結果が変わるので、数値のみだけ処理するという条件を入れることもできます。

環境

  • OS windows11 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 107.0.5304.88

合計値を取得する

合計値を取得するには「set」に「forEach」を使用して各値を加算していくことで可能です。

const s1 = new Set([1, 2, 3, 4, 5]);

let sum = 0;

s1.forEach(function(n){return sum += n;});

console.log(sum); // 15

実行結果

文字列が含まれている場合もケアするのであれば、数値判定処理を追加します。

const s1 = new Set([1, 2, 3, '1', 4, 5]);

let sum = 0;

s1.forEach(function(n){ if( Number.isFinite(n) ) return  sum += n ;});

console.log(sum); // 15

ちなみに、配列でも同様の結果が得られます。

const arr = [1, 2, 3, 4, 5];

let sum = 0;

arr.forEach(function(n){return sum += n;});

console.log(sum); // 15

パフォーマンス比較

ちなみ配列とSETを使用して、連続する配列「1,2,…100」を使用してパフォーマンスを比較したところ配列の方がパファーマンスは良さそうでした。

<script>

  // 実行回数
  const times = 1_000_000;

  // 空白を埋めるだけの関数
  function spacePadding(val, n = 8) {
    for (; val.length < n; val += ' ');
    return val;
  }

  // 計測結果を表示
  const benchmark = (name, start, end) => {
    let report = (end - start).toPrecision(3);
    // 表示を見やすくするため関数名に空白を埋める
    name = spacePadding(name)
    console.log(`実行回数:${times}回 関数名:${name} 実行時間:${report}(ms)`);
  }


  // 配列 100個の連続した値
  const arr = Array.apply(null, { length: 100 }).map((v, index) => index);

  // set
  const s = new Set(arr);

  // カウントする文字
  let sum = 0;

  // 計測
  start = performance.now();

  for (let i = 0; i < times; ++i) {
    sum = 0;

    arr.forEach(function (n) { return sum += n; });
  }

  end = performance.now();

  benchmark('arr', start, end);

  // 計測
  start = performance.now();

  for (let i = 0; i < times; ++i) {
    sum = 0;

    s.forEach(function (n) { return sum += n; });
  }

  end = performance.now();

  benchmark('set', start, end);

</script>

計測結果

実行回数:1000000回 関数名:arr      実行時間:207(ms)
実行回数:1000000回 関数名:set      実行時間:870(ms)