You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用扩展运算符(Spread Operator)动态设置对象键名?

扩展运算符动态设置键名:当然可以!

完全支持用扩展运算符配合计算属性名来动态设置对象的键名,根本不用非得手动遍历处理——ES6就已经把这个特性纳入对象字面量的语法里了,刚好解决你说的这类场景。

举个实际例子帮你理解:假设你有这样的初始对象,还有动态的键名和值:

const initialStructure = { title: 'JavaScript Guide', author: 'Jane Doe' };
const dynamicKey = 'publishYear';
const dynamicValue = 2024;

如果直接写{ ...initialStructure, dynamicKey: dynamicValue },结果里的键名会是字符串"dynamicKey",这显然不是你想要的。但只要把动态键名用方括号[]包起来,就能让它被当作变量解析:

// 正确写法:计算属性名 + 扩展运算符
const targetObj = {
  ...initialStructure,
  [dynamicKey]: dynamicValue
};

// 输出结果:{ title: 'JavaScript Guide', author: 'Jane Doe', publishYear: 2024 }

更复杂的场景也能搞定,比如动态键名是表达式的结果:

const categoryPrefix = 'content_';
const enhancedObj = {
  ...initialStructure,
  [`${categoryPrefix}type`]: 'Technical',
  [initialStructure.author.split(' ')[0].toLowerCase()]: 'verified'
};

// 输出结果:{ title: 'JavaScript Guide', author: 'Jane Doe', content_type: 'Technical', jane: 'verified' }

如果需要批量添加多个动态键值对,也可以先把这些键值转成对象(比如用Object.fromEntries()),再用扩展运算符合并:

const dynamicPairs = [['isFeatured', true], ['views', 1000]];
const dynamicObj = Object.fromEntries(dynamicPairs);
const finalObj = { ...initialStructure, ...dynamicObj };

// 输出结果:{ title: 'JavaScript Guide', author: 'Jane Doe', isFeatured: true, views: 1000 }

既然你已经结合方案实现了需求,要是之前用的是手动遍历的方式,不妨试试上面这些写法,能让代码更简洁直观~

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:20:18