2015-06-10 5 views
1

У меня есть следующий объект:Sum все свойства в объекте

{"speed":299,"equipment":49,"teleabb":49,"additional":50,"optional":"299"} 

Я хочу просуммировать все эти значения и распечатать его. Как я могу суммировать значения свойств? :)

ответ

8
  1. итерацию по свойствам объекта с помощью for(var in)
  2. Использование parseInt поскольку некоторые из целых чисел в виде строки

var obj = {"speed":299,"equipment":49,"teleabb":49,"additional":50,"optional":"299"}; 
 
var sum = 0; 
 

 
for(var key in obj){ 
 
    sum += parseInt(obj[key]); 
 
    } 
 

 
document.write(sum);

+0

Хороший способ решить. –

+0

Улучшенный идентификатор, который вы не используете document.write, используйте функцию, и вы добавляете hasOwnProperty –

+0

@ RaúlMartín 'document.write' - это простой способ отобразить результат в фрагменте кода. Использование функции - это задача задающего вопрос. И, наконец, почему 'hasOwnProperty' предоставил код выше? Что бы он сделал? – CodingIntrigue

0
var sum = 0; 
for(var key in objects) { 
    sum += parseInt(objects[key]); 
} 
console.log(sum); 
0

Вы можете сделать это следующим образом:

var sum_object = {"speed":299,"equipment":49,"teleabb":49,"additional":50,"optional":"299"}; 
var sum = 0; 

for(var index in sum_object){ 
    sum += parseInt(sum_object[index]); 
    console.log("Val: ",sum_object[index], sum); 
}; 

console.log(sum); 

JSFiddle: http://jsfiddle.net/abvuh5m0/

1

My для менее версии:

var obj = {"speed":299,"equipment":49,"teleabb":49,"additional":50,"optional":"299"}; 
 

 
function sumProperties(obj) { 
 
    return Object.getOwnPropertyNames(obj) 
 
    .map(function(item){ return +obj[item];}) 
 
    .reduce(function(acc,item) { return acc + item; }); 
 
} 
 

 
document.write(sumProperties(obj));

+1

Не видел этого. Ницца! – AmmarCSE

3

Вот способ сделать это с помощью ES5-х Object.keys и reduce:

var obj = {"speed":299,"equipment":49,"teleabb":49,"additional":50,"optional":"299"}; 
var sum = Object.keys(obj).reduce(function(prev, current, index) { 
    return prev + (+obj[current]); 
}, 0); 
console.log(sum); // 746 

jsFiddle

+0

Это хорошая альтернатива другим 6 подобным ответам!^1 – AmmarCSE

+0

@AmmarCSE Спасибо. Я думал, что это была интересная проблема для решения, я думаю, что и все остальные! – CodingIntrigue

+1

Почему бы и нет? Object.keys (объект) .reduce (функция (предыдущий, ключ) { возвращение предыдущего + (ParseInt (OBJ [ключ] || 0)); }, 0) –

0
var obj = {"speed":299,"equipment":49,"teleabb":49,"additional":50,"optional":"299"}; 


function sum(obj){ 
    var sum = 0; 
    for(var key in obj){ 
     if (obj. hasOwnProperty(key)) { 
      sum += parseInt(obj[key]) || 0; 
     } 
    } 
    return sum 
} 

console.log(sum(obj)); 

parseInt(obj[key]) || 0; важно идентификатор значение не является числом

1

Учитывая

var obj = {"speed":299,"equipment":49,"teleabb":49,"additional":50,"optional": 299} 

вы можете сделать это очень легко с lodash библиотеки:

var result = _.sum(obj); 

Если некоторые из значений не числа, вам нужно сопоставить их с номерами первым:

var result = _.sum(_.map(obj, function(n){ 
    return +n; 
    //or parseInt(n) or parseInt(n,10) 
})); 

http://plnkr.co/edit/UQs1aTCJ8qe1kG15G4x7?p=preview

Смежные вопросы