从字符串数组动态赋值JSON对象字段失败问题求助
解决动态键名的对象字面量语法错误问题
嘿,这个问题我太熟悉了!你碰到的是JavaScript里对象字面量动态键名的常见语法坑——直接把headers[f]写在冒号左边是不行的,因为普通对象字面量的键名位置只能识别标识符或者字符串常量,而headers[f]是一个表达式,解析器没法直接处理,这就是你看到「Unexpected token,expected ","」错误的原因。
问题根源
在ES6之前,如果你想给对象设置动态生成的键名,只能先创建空对象,再通过方括号语法赋值:
const obj = {}; obj[headers[f]] = "你的值";
而你现在尝试在对象字面量里直接用表达式当键名,旧语法不支持这种写法。
解决方案:使用ES6计算属性名
ES6引入了计算属性名的语法,只要把动态键名用方括号[]包裹起来,就能在对象字面量里直接使用表达式作为键名了。修改你代码里的push语句即可:
export function excelNull(userReq) { var i = 0 var f = 0 let values = [] let headers = Object.keys(userReq[0]) console.log(headers) for (f = 0; f < headers.length; f++) { for (i = 0; i < userReq.length; i++) { if (isNullOrUndefined(userReq[i][headers[f]])) { // 这里把headers[f]用方括号包裹,作为计算属性名 values.push({ [headers[f]]: userReq[i]["__rowNum__"] + 1 + ". satırda " + headers[f] + " boş olamaz" }) } } } return values }
效果验证
修改后,每次循环都会把headers[f]的求值结果作为对象的键名,最终你就能得到期望的数组结构:[{field1:"val1"},{field2:"val2"},...]。
这个小细节确实容易被忽略,尤其是刚接触ES6语法的时候,不过记住计算属性名的用法,以后处理动态键名的场景就轻松多啦!
内容的提问来源于stack exchange,提问作者Caner Ünver
相关产品推荐
相关产品推荐

