把 {zhangsan: “beijing”,lisi: “shanghai”} 这样的对象转成 [{name: “zhangsan”, address: “beijing”}, {name: “lisi”, address: “shanghai”}] 这样的数组
将一个包含多个键值对的对象转换成一个由多个包含 “name” 和 “address” 属性的对象组成的数组。下面是一个相应的函数:
function transformObject(obj) {
return Object.keys(obj).map(key => ({ name: key, address: obj[key] }));
}
// 测试
let inputObject = { zhangsan: "beijing", lisi: "shanghai" };
let outputArray = transformObject(inputObject);
console.log(outputArray);
在这个函数中,使用 Object.keys(obj)
获取对象中的所有键,然后使用 map
方法遍历这些键,构建一个新的对象数组。每个新对象包含两个属性:“name” 和 “address”,分别对应原始对象的键和对应的值。
在上面的测试中,inputObject
是你提供的对象,而 outputArray
是转换后的数组。你可以根据需要修改输入对象,然后查看转换结果。
为什么是 key => ({ name: key, address: obj[key] }) 而不是 key => { name: key, address: obj[key] }
这是因为当你在箭头函数中使用花括号 {}
时,你需要显式地使用 return
关键字来返回一个值。在这种情况下,return
是必需的。
而当你使用圆括号 ()
包裹对象字面量时,JavaScript 解释器会将其视为一个表达式,而不是一个语句块。这样,你就可以省略 return
关键字,因为箭头函数隐含了返回这个表达式的意图。
下面是比较两者的写法:
使用圆括号 ()
包裹对象字面量,省略了 return
:
key => ({ name: key, address: obj[key] })
使用花括号 {}
,需要显式使用 return
:
key => { return { name: key, address: obj[key] } }
在这个场景中,由于我们只是简单地创建一个新的对象字面量并返回它,使用圆括号是更为简洁的写法。