JavaScript中map方法将参数包裹在花括号中为何返回对象数组
问题解答
你的猜测接近本质,但触发这个键值自动映射逻辑的不是map方法,而是ECMAScript 2015(ES6)引入的对象属性简写语法特性。
你提供的运行代码如下:
const startingArray = ['One', 'Two', 'Three', 'Four', 'Five']; let endingArray = startingArray.map((nums) => { return { nums } }); console.log(endingArray)
运行后得到对象数组的完整逻辑是:
map方法确实会遍历原数组的每一个元素,将每个元素传入回调函数,把回调的返回值收集为新数组的元素- 回调函数中
return { nums }的写法是对象字面量的简写,等价于return { nums: nums }:- 当你在对象字面量的大括号中仅填写变量名时,JS会自动把变量名作为对象的键名,变量的实际值作为对应键的取值
- 这里回调的形参
nums每次接收的就是原数组当前遍历到的元素值,所以每次返回的对象就是{nums: 原数组当前元素}
- 所有回调返回的对象被
map收集后,就得到了你看到的对象数组。
你可以做个简单测试验证:把回调的形参名改成item,返回值写为{item},最终得到的数组元素就会变成{item: 'One'}、{item: 'Two'}的形式,这也能说明这个特性和map无关,是JS本身的语法规则。
对象属性简写在日常开发中非常常用,脱离map场景也可以正常使用,比如:
const username = "小明"; const age = 18; // 下面两种写法完全等价 const user1 = { username: username, age: age }; const user2 = { username, age }; // 最终两个变量的值都是 {username: "小明", age: 18}
内容的提问来源于stack exchange,提问作者Austin737
相关产品推荐
相关产品推荐

