У меня есть объект, подобный этому:
obj = { name:"myobject", MON: 3, TUE: 5}
Я пытаюсь сделать _.sum(_.values(obj))
и поместить это значение в массив this.hours.push(_.sum(_.values(obj)))
.
Я ожидаю такой массив [8]
(причина, по которой я хочу хранить его внутри массива, заключается в том, что в будущем мне может понадобиться проанализировать несколько объектов). Как мне этого добиться?
Отфильтруйте не числа.
const obj = { name: "myobject", MON: 3, TUE: 5 };
const numbers = _.filter(obj, x => typeof x === 'number');
const total = _.sum(numbers);
О да. Довольно.
На всякий случай, если это кому-то понадобится, добавление обычного способа сделать это, кроме ответа @mbojko:
const obj = { name: "myobject", MON: 3, TUE: 5 };
var total = 0;
_.forOwn(obj, function(value) {
if(typeof value === 'number')
total += value;
});
Вы можете использовать _.sumBy()
и вернуть 0 для нечисловых значений:
const obj = { name:"myobject", MON: 3, TUE: 5}
const result = _.sumBy(_.values(obj), v => _.isNumber(v) ? v : 0)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
я предполагаю, что вы имели в виду const total = _.sum(numbers);