映射到对象
重要程度: 5
你有一个 user
对象数组,每个对象都有 name
,surname
和 id
。
编写代码以该数组为基础,创建另一个具有 id
和 fullName
的对象数组,其中 fullName
由 name
和 surname
生成。
例如:
let john = { name: "John", surname: "Smith", id: 1 }; let pete = { name: "Pete", surname: "Hunt", id: 2 }; let mary = { name: "Mary", surname: "Key", id: 3 }; let users = [ john, pete, mary ]; let usersMapped = /* ... your code ... */ /* usersMapped = [ { fullName: "John Smith", id: 1 }, { fullName: "Pete Hunt", id: 2 }, { fullName: "Mary Key", id: 3 } ] */ alert( usersMapped[0].id ) // 1 alert( usersMapped[0].fullName ) // John Smith
所以,实际上你需要将一个对象数组映射到另一个对象数组。在这儿尝试使用箭头函数 =>
来编写。
let john = { name: "John", surname: "Smith", id: 1 }; let pete = { name: "Pete", surname: "Hunt", id: 2 }; let mary = { name: "Mary", surname: "Key", id: 3 }; let users = [ john, pete, mary ]; let usersMapped = users.map(user => ({ fullName: `${user.name} ${user.surname}`, id: user.id })); /* usersMapped = [ { fullName: "John Smith", id: 1 }, { fullName: "Pete Hunt", id: 2 }, { fullName: "Mary Key", id: 3 } ] */ alert( usersMapped[0].id ); // 1 alert( usersMapped[0].fullName ); // John Smith
请注意,在箭头函数中,我们需要使用额外的括号。
我们不能这样写:
let usersMapped = users.map(user => { fullName: `${user.name} ${user.surname}`, id: user.id });
我们记得,有两种箭头函数的写法:直接返回值 value => expr
和带主体的 value => {...}
。
JavaScript 在这里会把 {
视为函数体的开始,而不是对象的开始。解决方法是将它们包装在普通括号 ()
中:
let usersMapped = users.map(user => ({ fullName: `${user.name} ${user.surname}`, id: user.id }));
这样就可以了。