如何更简洁地为JavaScript对象设置多个属性?
更简洁的对象属性赋值方案
你可以用以下几种方式替代逐个赋值的写法,让代码更简洁优雅:
方法1:使用 Object.assign()
Object.assign() 可以直接将一个或多个源对象的所有可枚举属性复制到目标对象,正好适配你的场景——把parserResult里的属性直接合并到param中,连解构步骤都能省掉:
修改后的测试代码
// 实际场景中解析器会根据param返回不同结果 const parserResult = {'value':2,'syntaxError':false,'NaNError':false} const param = {someProperty:'any value'} // 可以包含任意属性 // 一行代码完成属性合并 Object.assign(param, parserResult) console.log(param)
修改后的完整测试代码
const parseParam = param => { // 实际场景中解析器会根据param返回不同结果 const parserResult = {'value':2,'syntaxError':false,'NaNError':false} // 直接合并属性 Object.assign(param, parserResult) return param } const parameters = [{someProperty:'test'},{someProperty:'someValue'}] const parsedParameters = parameters.map(parseParam) console.log(parsedParameters)
方法2:使用对象展开运算符(创建新对象)
如果你的业务允许返回一个新对象而不是修改原param,可以用展开运算符...来合并对象,写法更直观:
修改后的完整测试代码
const parseParam = param => { // 实际场景中解析器会根据param返回不同结果 const parserResult = {'value':2,'syntaxError':false,'NaNError':false} // 返回合并后的新对象,不修改原param return {...param, ...parserResult} } const parameters = [{someProperty:'test'},{someProperty:'someValue'}] const parsedParameters = parameters.map(parseParam) console.log(parsedParameters)
注意点
- 如果
param本身已经包含value、syntaxError或NaNError属性,两种方法都会用parserResult里的值覆盖掉原属性,这和你原来的代码逻辑一致。 Object.assign()会直接修改目标对象(也就是原param),而展开运算符会创建新对象,根据你的业务需求选择即可。
内容的提问来源于stack exchange,提问作者Jip Helsen
相关产品推荐
相关产品推荐

