JavaScript对象添加键值对时动态键失效的解决方法
解决方案
问题出在你使用对象字面量时,直接写header会被解析为固定字符串键名,而非变量的实际值。要让变量值作为键名,需要用ES6引入的计算属性名语法。
方法一:使用计算属性名(推荐)
直接在对象字面量里用方括号包裹变量,这样就会将变量的值作为键名:
for (var j = 0; j < words.length; j++) { let criteria = {}; let header = headers[j]; // 用方括号包裹header变量,将其值作为键名 Object.assign(criteria, { [header]: words[j] }); // ...后续逻辑 }
方法二:先手动创建键值对(兼容旧环境)
如果需要兼容不支持ES6的环境,可以先创建临时对象,再通过方括号赋值:
for (var j = 0; j < words.length; j++) { let criteria = {}; let header = headers[j]; const temp = {}; temp[header] = words[j]; Object.assign(criteria, temp); // ...后续逻辑 }
额外提示
如果你的需求是把所有headers和words的键值对合并到同一个criteria对象中,需要把let criteria = {};移到循环外面,否则每次循环都会重置这个对象:
let criteria = {}; // 移到循环外 for (var j = 0; j < words.length; j++) { let header = headers[j]; Object.assign(criteria, { [header]: words[j] }); } // 最终criteria会包含所有键值对:{designation: 'Manager', address: 'UK', ...}
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

