使用JavaScript Reduce返回对象

使用JavaScript Reduce返回对象,javascript,methods,reduce,Javascript,Methods,Reduce,在FreeCodeCamp上,我被介绍到以下代码片段: const users = [ { name: 'John', age: 34 }, { name: 'Amy', age: 20 }, { name: 'camperCat', age: 10 } ]; const usersObj = users.reduce((obj, user) => { obj[user.name] = user.age; return obj; }, {}); console.log

在FreeCodeCamp上,我被介绍到以下代码片段:

const users = [
  { name: 'John', age: 34 },
  { name: 'Amy', age: 20 },
  { name: 'camperCat', age: 10 }
];

const usersObj = users.reduce((obj, user) => {
  obj[user.name] = user.age;
  return obj;
}, {});
console.log(usersObj);

// expected result : { John: 34, Amy: 20, camperCat: 10 }
我已经看了一段时间了,只是不知道reduce函数是如何工作的。在我看来,它在第一次迭代中的工作原理如下:

**ITERATION 1:**
Initial Accumulator (obj): {}
CurrVal (user): {name: 'John', age: 34}
Updated Accumulator: {}[{name: 'John', age: 34}.name] = {name: 'John', age: 34}.age;
但是,当我一步一步地尝试这一点时,我的控制台立即出现了错误,因为我知道更新的累加器基本上是说
[“John”]=34
为什么我们要将名称设置为年龄


我在这里遗漏了什么来连接缺失的部分?为什么上面的代码可以工作?

本质上,您描述的流程就是正在发生的事情,但它不是有效的JS,它的编写方式

如果我将代码稍微调整为有效的JS,您将得到以下结果:

//**第1次迭代:**
设累加器={};
log('累加器:\n',累加器);
让currVal={姓名:'John',年龄:34};
console.log('当前值:\n',currVal);
累加器[currVal.name]=currVal.age;

console.log('Updated acculator:\n',acculator)
obj[user.name]
似乎在
obj
上创建了一个名为
user.name
的属性,然后为其赋值
user.age
。如果您希望结果是
{John:34,…}
,那么您肯定必须将名称的键及其值设置为年龄…?!试试
constu={};u['John']=34;控制台日志(u)
…@deceze,你似乎能够指出我的一些困惑:
const u={};u['John']=34;控制台日志(u)
在一次性执行时工作得非常好
{}['John']=34
抛出一个错误。这只是一个糟糕的测试,因为
{}
的含义在这里不明确
({}['John']]=34
就可以了,但是结果将立即被丢弃,因为您正在动态创建的对象没有分配给任何对象,因此您将看不到结果对象。