Javascript 在for-in循环中的特定数组属性上使用JS Array.Reduce

Javascript 在for-in循环中的特定数组属性上使用JS Array.Reduce,javascript,arrays,qt,qml,Javascript,Arrays,Qt,Qml,我尝试使用数组的组合。在循环数据时减少,以提供将数组中的值相加的结果,但仅当它们还具有另一个匹配属性时,我的数组示例为: {"2018":[{"leaveYear":2018,"dayValue":60},{"leaveYear":2018,"dayValue":60}], "2019":[{"leaveYear":2019,"dayValue":60}]} 对于上面的示例,我想做的是获取每个dayValue的总和,但仅当它们的leaveYear匹配时。所以我的结果是: 2018:120 20

我尝试使用
数组的组合。在循环数据时减少
,以提供将数组中的值相加的结果,但仅当它们还具有另一个匹配属性时,我的数组示例为:

{"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;
    }
我的问题是
执行此操作时,有时效果很好,但当添加更多数组对象或几个
leaveYear
时,循环有时似乎会跳过或错过数字,只会减少给定
leaveYear

如何在数组的每个
leaveYear
上循环,以减少信号并将其发送到数据库,然后再移动到下一组值


谢谢你的帮助

您的输入是一个值为数组的对象,您需要为原始对象中的每个键值对创建一个新对象。您可以通过
.map
将每个内部数组ping到一个条目,使用
对数组中每个项目的
日值进行求和
,然后使用
对象转换回一个对象。fromEntries

const输入={
"2018": [{
“离职年度”:2018年,
“日价值”:60
}, {
“离职年度”:2018年,
“日价值”:60
}],
"2019": [{
“离职年份”:2019年,
“日价值”:60
}]
};
const sumDays=yearr=>yearr.reduce((a,b)=>a+b.dayValue,0);
常量输出=Object.fromEntries(
Object.values(input.map(yearr=>([yearr[0].leaveYear,sumDays(yearr)])
);

控制台日志(输出)
感谢您的回答,我无法使用箭头功能
=>
,我正在
Felgo
中构建我的应用程序,以前是
V-Play
,目前正在尝试调整此功能以开始工作(箭头功能不是很好),一旦完成,我将标记为已回答!我正在处理
reduce
建议,而不是
fromEntries
!万分感谢!一般来说,最好使用最新和最好的语言版本编写,然后使用类似的工具自动向下传输以实现ES5兼容性。这使您可以编写简洁明了的代码,同时仍然允许过时的浏览器理解它;var output=Object.values(input).reduce(函数(a,yearr){a[yearr[0].leaveYear]=sumDays(yearr);返回a;},{})巴贝尔…我刚刚发现了一些惊人的事情。谢谢你的提示!对我来说,它绝对更具可读性——写新的然后写下来是有意义的!请注意,Felgo并没有阻止您使用arrow函数,您只需要Qt5.12或更高版本
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)
            }