Javascript 以object作为初始值的数组reduce
有人能解释一下Javascript 以object作为初始值的数组reduce,javascript,Javascript,有人能解释一下reduce函数是怎么回事吗?在下面的例子中,我有一个带有键和空数组的对象作为reduce方法的初始值,我想在reduce方法中有一步一步的解释 initExercises={ 路肩:[], 胸:[], 武器:[], 背面:[], 腿:[] } 练习=[ { id:“顶置压力机”, 标题:“顶置压力机”, 描述:“深入练习…”, 肌肉:“肩膀” }, { id:“浸入”, 标题:“下跌”, 描述:“三头肌锻炼…”, 肌肉:“手臂” }, { id:“杠铃卷曲”, 标题:“杠铃卷曲
reduce
函数是怎么回事吗?在下面的例子中,我有一个带有键和空数组的对象作为reduce
方法的初始值,我想在reduce方法中有一步一步的解释
initExercises={
路肩:[],
胸:[],
武器:[],
背面:[],
腿:[]
}
练习=[
{
id:“顶置压力机”,
标题:“顶置压力机”,
描述:“深入练习…”,
肌肉:“肩膀”
},
{
id:“浸入”,
标题:“下跌”,
描述:“三头肌锻炼…”,
肌肉:“手臂”
},
{
id:“杠铃卷曲”,
标题:“杠铃卷曲”,
描述:“肱二头肌锻炼…”,
肌肉:“手臂”
},
{
id:“台式压力机”,
标题:“台式压力机”,
描述:“胸部锻炼……”,
肌肉:“胸部”
},
{
id:“引体向上”,
标题:“引体向上”,
描述:“背部和二头肌锻炼…”,
肌肉:“背”
},
{
id:“自动升降”,
标题:“死亡电梯”,
描述:“背部和腿部锻炼……”,
肌肉:“背”
},
{
id:“蹲下”,
标题:“蹲下”,
描述:“腿部锻炼……”,
肌肉:“腿”
}
];
console.log(
练习。减少((acc,curr)=>{
常数{
肌肉
}=货币;
acc[肌肉]=[…acc[肌肉],curr]//这里发生了什么?
返回acc;
},第一部分(练习)
),acc[肌肉]=[…acc[肌肉],curr]
等于acc[肌肉]=acc[肌肉].concat(curr)
,例如,将curr
ent运动添加到带有关键肌肉的组中您的reduce
功能说明:
exercises.reduce((acc,curr)=>{/*…*/},initExercises)
…将
- 将
initExercises
放入acc
,将exercises[0]
放入curr
- 然后将上一次迭代的返回值放入
acc
,将当前元素放入curr
- 最后,它返回上一次迭代的返回值
这个片段:
const{
肌肉
}=货币;
…从对象curr
(是练习
数组的一个元素)提取muscles
属性到常量muscles
那么这个,
acc[肌肉]=[…acc[肌肉],curr]
…为同一块肌肉创建一个新数组,即前一个数组(位于(刚被分解的)muscles
变量所指向的acc
umulator对象的属性中),并将curr
ent对象追加到该数组的末尾;最后将acc[muscles]
中的旧数组(由muscles
指向的属性)替换为新数组
最后,它返回sacc
umulator,为下一次迭代保留它
因此,该函数返回一个对象,其中数组元素按其属性分组
详细迭代:
| acc | curr | muscles |[…acc[muscles],curr]|返回值
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0 |初始练习|{id:“头顶按压”、…}|“肩膀”|[{id:“头顶按压”、…}]{肩膀:[{id:“头顶按压”、…}],胸部:[],手臂:[],背部:[],腿部:[]}
1 |返回| 0 |{id:“下倾”,…}{id:“下倾”,…}]{id:“下倾”,…}]{肩部:[{id:“头顶按压”,…}],胸部:[],手臂:[{id:“下倾”,…}],背部:[],腿部:[]}
2 |返回| 1 |{id:“杠铃卷曲”,…}{id:“下倾”,…},{id:“杠铃卷曲”,…}}{肩膀:[{id:“头顶按压”,…}],胸部:[手臂:[{id:“下倾”,…},{id:“杠铃卷曲”,…},背部:[],腿:[]
...
@FZs OP提取最小可复制示例时很可能是一个输入错误。这是一个输入错误…acc[肌肉]=[…acc[肌肉],curr]我想知道这里发生了什么,以及它是如何工作的inititalExercises@Seblor我怀疑,但没有纠正,因为很多问题都是由拼写错误引起的…acc[肌肉]=[…acc][muscles],curr]我想知道这里发生了什么,以及它是如何与inititalExercises一起工作的“curr”遍历练习数组中的每个对象,什么是acc[muscles]在每次迭代中?在每次迭代中,acc
是前一次迭代的结果,因为第一次迭代是initial
。参考上有非常好的例子。它不应该是像“acc[肌肉]:[…acc[肌肉],curr]“因为acc是一个以键为肌肉,以值为数组的对象,所以当你创建或解构一个对象({…}
)时,我很困惑,你使用:
。如果你给某个东西赋值(变量或对象属性),你使用=
acc[muscles]是一个数组,明白了吗,最初是acc[muscles]=curr,即curr是练习数组中的第一个对象,在下一次迭代中,curr将是练习数组中的第二个对象,然后是acc[muscles]=[curr2]的值,然后是。但是acc是initialexerce,key是muscles,value是数组,它是如何分组的?acc[muscles]的值到底是多少在每一次迭代中,以及它如何与initialExercise组合,我真的很难理解它