无法将JavaScript变量绑定为JSON对象键的问题求助
问题解决
你遇到的问题是因为在对象字面量中直接写projectName时,它会被当作字符串字面量键,而不是取变量projectName的值。要实现用变量值作为对象键,需要使用ES6的计算属性名语法,用方括号把变量包裹起来。
另外你的代码里还有一个小问题:定义了projectName变量但始终没赋值,循环里给的是name变量,所以需要把循环中获取的项目名赋值给projectName。
修正后的代码:
var projectName = ''; let tempArray = []; let output = {}; for(let i = 0; i < myJsonArray.length; i++){ // 将获取到的项目名赋值给projectName变量 projectName = myJsonArray[i].Project; tempArray.push(myJsonArray[i]); } // 使用计算属性名,用方括号包裹变量,取变量值作为键 output = { [projectName]: tempArray }; console.log(JSON.stringify(output));
为什么这样有效?
- 普通对象字面量写法
{ projectName: tempArray }中,projectName是固定的字符串键名,不会解析变量。 - 计算属性名
{ [projectName]: tempArray }会先计算方括号内的表达式(这里就是取projectName变量的值),将结果作为对象的键名。
额外优化建议
如果你的myJsonArray里存在多个不同项目名,上面的代码只会保留最后一个项目名的数据,此时需要在循环里做分组处理:
let output = {}; for(let i = 0; i < myJsonArray.length; i++){ const projectName = myJsonArray[i].Project; // 如果当前项目名对应的数组不存在,先初始化空数组 if(!output[projectName]){ output[projectName] = []; } output[projectName].push(myJsonArray[i]); } console.log(JSON.stringify(output));
这样可以自动把不同项目名的数据分组到对应的数组中。
内容的提问来源于stack exchange,提问作者Ramaraju.d
相关产品推荐
相关产品推荐

