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

函数调用传参异常:如何正确获取对象属性生成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:02:08