函数调用传参异常:如何正确获取对象属性生成GraphQL语句?
问题描述
我写了一个生成GraphQL mutation语句的firstFunc函数,在另一个函数中调用时结果不符合预期。
我的代码:
const firstFunc = (res) => ` mutation{ createTable(input: { name: "${res}.name" color: ${res}.color }) } }`;
第一次尝试在forEach中调用:
arr.forEach((d) => { console.log(firstFunc("d.data.data.table")); });
返回结果:
mutation{ createTable(input: { name: "d.data.data.table.name" color: d.data.data.table.color }) } }
第二次修改调用方式:
arr.forEach((d) => { console.log(firstFunc(d.data.data.table)); });
返回结果:
mutation{ createTable(input: { name: "[object Object].name" color: [object Object].color }) } }
我的预期结果是:
mutation{ createTable(input: { name: "Test Name" color: blue }) } }
请问如何实现预期结果?
解决方案
问题出在模板字符串的变量引用逻辑错误:
- 传入字符串
"d.data.data.table"时,模板字符串只会把它当作普通文本拼接,不会解析成对象属性 - 传入实际对象
d.data.data.table时,${res}会被转成字符串[object Object],拼接.name后自然无法读取到真实属性值
正确写法是在模板字符串中直接访问对象的属性:
修改firstFunc函数:
const firstFunc = (res) => ` mutation{ createTable(input: { name: "${res.name}" color: ${res.color} }) } }`;
保持正确的调用方式(传入对象而非字符串):
arr.forEach((d) => { console.log(firstFunc(d.data.data.table)); });
这样就能正确读取对象的name和color属性,生成符合预期的GraphQL mutation语句。
注意:如果color是字符串类型,需要给它加上引号,写成color: "${res.color}",否则GraphQL会将其识别为枚举值或变量,可能引发语法错误。
内容的提问来源于stack exchange,提问作者nb_nb_nb
相关产品推荐
相关产品推荐

