1. ホーム
  2. javascript

[解決済み] JavaScriptのオブジェクトの値を合計するには?

2022-08-24 19:47:35

質問

あるオブジェクトの値を合計したい。

私はそれがちょうどであろうpythonに慣れています。

sample = { 'a': 1 , 'b': 2 , 'c':3 };
summed =  sum(sample.itervalues())     

以下のコードは動作しますが、コード量が多くなります。

function obj_values(object) {
  var results = [];
  for (var property in object)
    results.push(object[property]);
  return results;
}

function list_sum( list ){
  return list.reduce(function(previousValue, currentValue, index, array){
      return previousValue + currentValue;
  });
}

function object_values_sum( obj ){
  return list_sum(obj_values(obj));
}

var sample = { a: 1 , b: 2 , c:3 };
var summed =  list_sum(obj_values(a));
var summed =  object_values_sum(a)

私は何か明らかなことを見逃しているのでしょうか、それともこれはただ単にそうなのでしょうか?

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

1つの関数にまとめてしまえばいいのです。

function sum( obj ) {
  var sum = 0;
  for( var el in obj ) {
    if( obj.hasOwnProperty( el ) ) {
      sum += parseFloat( obj[el] );
    }
  }
  return sum;
}
    
var sample = { a: 1 , b: 2 , c:3 };
var summed = sum( sample );
console.log( "sum: "+summed );


参考までに、もう一つの実装として Object.keys() Array.reduce() (を追加しました(ブラウザのサポートはもう大きな問題ではないはずです)。

function sum(obj) {
  return Object.keys(obj).reduce((sum,key)=>sum+parseFloat(obj[key]||0),0);
}
let sample = { a: 1 , b: 2 , c:3 };

console.log(`sum:${sum(sample)}`);

しかし、これだとかなり遅くなるようです。 jsperf.com