Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以object作为初始值的数组reduce_Javascript - Fatal编程技术网

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
指向的属性)替换为新数组

最后,它
返回
s
acc
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组合,我真的很难理解它