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

动态创建JavaScript对象遇问题:属性不持久+编译报错求排查

问题解析与修复方案

嘿,我来帮你搞定这两个问题!咱们一个个拆解:

1. 属性无法持久保留的原因

你现在的代码里,对象字面量写的是key: value,这里的key会被当成固定的字符串属性名(也就是属性名永远是"key"),而不是你传入的变量key的实际值。所以每次调用process函数,其实都是在给response对象的同一个"key"属性赋值,之前添加的其他属性自然就被覆盖或没正确添加,看起来像是无法持久保留。

修复方法很简单,用ES6的计算属性名,把key用方括号包起来,这样就会把变量key的值作为属性名:

response = { ...response, [key]: value }

这样每次调用时,会把传入的key变量对应的字符串作为属性名,把value赋值给它,同时扩展运算符...response会保留之前已有的属性,完美实现你要的“保留此前添加的属性及值”的需求。

2. FieldMapping[key] : value的编译错误

直接写FieldMapping[key]: value不符合对象字面量的语法规则。如果你的需求是把FieldMapping[key]的值作为属性名,同样需要用计算属性名的写法,把整个表达式放在方括号里:

// 正确写法
{ [FieldMapping[key]]: value }

因为对象字面量的属性名如果是表达式(比如变量、对象属性访问等),必须用方括号[]包裹起来,否则JS引擎会把它当成标识符解析,自然就会抛出编译错误。

完整修复后的代码

把两处问题修正后,代码应该是这样的:

let response = {}; 
const process = (key, value) => { 
  if (key == FieldMapping[key]) { 
    response = { ...response, [key]: value }; 
    console.log(key + " : " + value); 
  } 
}

这样既可以正确地把传入的key作为属性名添加到response中并保留原有属性,也不会再出现编译错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 08:17:51