Я пытаюсь использовать комбинацию Array.reduce
во время циклического перебора данных, чтобы получить результат, в котором значение в моем массиве добавляется вместе, но только тогда, когда у них также есть другое подходящее свойство, и пример моего массива:
{"2018":[{"leaveYear":2018,"dayValue":60},{"leaveYear":2018,"dayValue":60}], "2019":[{"leaveYear":2019,"dayValue":60}]}
В приведенном выше примере я хочу получить сумму каждого dayValue
, но только тогда, когда их leaveYear
совпадает. Так что мой результат будет:
2018: 120
2019: 60
Эти данные будут затем сохранены в моей базе данных с ключом leaveYear
и уменьшенным значением dayValue
в качестве значения
Мой прогресс
Я начал с создания новых массивов, которые группируют объекты массива по leaveYear
, так как они могут быть любого года или любого порядка с помощью функции:
function getSum(total, num) {
return total + num;
}
//used to total my values
function groupBy(array, property) {
var hash = {};
for (var i = 0; i < array.length; i++) {
if (!hash[array[i][property]]) hash[array[i][property]] = [];
hash[array[i][property]].push(array[i]);
}
return hash;
}
Который создает массив массивов объектов с совпадающими годами в каждом. Затем, повторяя это снова, я начинаю уменьшать:
var grouped = groupBy(multiSelectSaveArr,'leaveYear')
var multiDeductTotal = []
// my array of arrays by leaveYear
for(var i in grouped) {
var splitGroup = grouped[i]
console.log("SPLITGROUP:" + JSON.stringify(splitGroup))
//my log shows the result of
//SPLITGROUP:[{"leaveYear":2018,"dayValue":60},{"leaveYear":2018,"dayValue":60}]
//SPLITGROUP:[{"leaveYear":2019,"dayValue":60}]
//I then loop through splitGroup to reduce for my desired result by doing the following:
for(var ix in splitGroup) {
multiDeductTotal.push([splitGroup[ix].dayValue])
}
var deductReduce = 0 + multiDeductTotal.reduce(getSum)
//signal to database storing data
calendarPage.amendTakenAllowance(deductReduce, year)
}
Моя проблема
При этом бывают случаи, когда это работает хорошо, но когда добавляется больше объектов массива или несколько leaveYears
, цикл, кажется, иногда пропускает или пропускает числа, только уменьшая некоторые или ни одного значения данного leaveYear
Как я могу зациклить каждый leaveYear
моего массива, чтобы уменьшить и отправить сигнал в мою базу данных, прежде чем перейти к следующему набору значений?
Спасибо за любую помощь!