Javascript 减少而不返回,但分配给变量失败

Javascript 减少而不返回,但分配给变量失败,javascript,ecmascript-6,Javascript,Ecmascript 6,使用reduce是否可以对所有值求和而不返回值,但将其分配给外部变量?我得到了错误的南使用下面的代码 const raw = [{ "age_data": [{ "male_count": 13, "female_count": 13 }, { "male_count": 452, "female_count": 470 }] }, { "age_data": [{ "male_count": 1, "female_count":

使用reduce是否可以对所有值求和而不返回值,但将其分配给外部变量?我得到了错误的南使用下面的代码

const raw = [{
  "age_data": [{
    "male_count": 13,
    "female_count": 13
  }, {
    "male_count": 452,
    "female_count": 470
  }]
}, {
  "age_data": [{
    "male_count": 1,
    "female_count": 2
  }, {
    "male_count": 58,
    "female_count": 32
  }]
}]

let total_male_count, total_female_count = 0
raw.forEach(obj => {
  obj.age_data.reduce((accum, obj2) => {
    total_male_count = accum + obj2.male_count
    total_female_count = accum + obj2.female_count
  }, 0)
})

console.log(total_male_count)
console.log(total_female_count)
我不确定accum,obj2.male\u count没有返回值有什么问题。

如果不使用其返回值,则不使用reduce。对于你正在做的事情,只需使用forEach

您的总男性计数未初始化,因此它开始时包含未定义的您只初始化了总女性计数。此外,您只需将其添加到总数中即可。。。变量,而不是使用累加器

因此,初始化它,添加到现有变量中,并使用正确的循环函数,您将得到正确的值

let total_male_count = 0, total_female_count = 0
// -----------------^^^^
raw.forEach(obj => {
  obj.age_data.forEach(obj2 => {
// ------------^^^^^^^^^^^^
    total_male_count += obj2.male_count
// ------------------^^
    total_female_count += obj2.female_count
// --------------------^^
  }, 0)
})
实例:

常量原始=[{ 年龄组数据:[{ 男性人数:13, 女性人数:13 }, { 男性人数:452, 女性人数:470 }] }, { 年龄组数据:[{ 男性人数:1, 女性人数:2 }, { 男性:58,, 女性人数:32 }] }] 设总男性计数=0,总女性计数=0 raw.forEachobj=>{ obj.age_data.forEachobj2=>{ 总公头计数+=obj2.公头计数 总女性人数+=obj2.女性人数 }, 0 } console.logtotal_male_计数
console.logtotal_female_count我编辑了你的代码,让它工作,尽管这不是正确的方法 常量原始=[{ 年龄组数据:[{ 男性人数:13, 女性人数:13 }, { 男性人数:452, 女性人数:470 }] }, { 年龄组数据:[{ 男性人数:1, 女性人数:2 }, { 男性:58,, 女性人数:32 }] }] 设总男性计数=0,总女性计数=0 raw.forEachobj=>{ obj.age_data.reduceacum,obj2=>{ 总公母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母母; 总女性人数+=obj2.女性人数; }, 0 } console.logtotal_male_计数 console.logtotal\u female\u count试试这个

var total_male_count= 0;

var total_female_count = 0;



for(var i of raw){

for(var j of i.age_data){

total_male_count += j.male_count;
total_female_count += j.female_count;

}


}

console.log(total_male_count);
console.log(total_female_count);

这里是一个使用两个数组reduce的解决方案,内部reduce对每个age_数据的男性和女性计数求和,而外部reduce对age_数据求和

const raw=[{年龄数据:[{男性人数:13,女性人数:13,{男性人数:452,女性人数:470}] },{年龄数据:[{男性人数:1,女性人数:2},{男性人数:58,女性人数:32}] var输出=原始。减少总和,obj=>{ 让temp=obj.age\u data.reduceacum,obj2=>{ 累计总外螺纹计数+=obj2外螺纹计数; 累计总内螺纹计数+=obj2内螺纹计数; 返回累计; },{男性总数:0,女性总数:0}; 总和男性总数+=临时男性总数; 总和女性总数+=临时女性总数; 回报金额; },{男性总数:0,女性总数:0}
console.LOGOUTPUT这是正确的,我不知道为什么一开始我就想到了reduce。@CeciliaChan:嗯,reduce很适合做一个单一的求和,所以这可能就是原因。是的,这是可能的,但你为什么要这么做!?reduce的全部目的不是对外部范围变量使用副作用。如果你想使用这种方法,你应该使用一些循环。你可以减少每个子部分,计算总和,然后更新全局变量。检查我的答案,以获得更好的解释