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

动态函数返回字符串而非预期对象数组的问题求助

动态函数返回字符串而非预期对象数组的问题求助

嗨,我来帮你梳理下这个问题~

你遇到的核心问题是模板字符串的误用,导致函数返回了字符串而非你预期的数组对象。咱们来拆解下原因:

你定义的表达式'${op.items}'是一个被引号包裹的模板字符串,当它被拼接到return语句后,函数执行时会自动把op.items这个数组转成字符串——因为模板字符串会调用数组的toString()方法,而数组的这个方法会把每个元素转为[object Object]后用逗号分隔,最终返回的就是这个拼接后的字符串,而非原数组对象。

给你两个实用的解决办法:

  • 直接方案:去掉模板字符串的反引号,让表达式直接指向数组本身。修改后的代码如下:

    const value = { items: [ { name: 'a' }, { name: 'b' } ] };
    // 直接使用数组引用,无需模板字符串包裹
    const expression = 'op.items';
    const fn = new Function('op', 'return ' + expression + ';');
    const result = fn(value);
    
    console.log('result', result); // 输出: [{ name: 'a' }, { name: 'b' }]
    console.log('type', typeof result); // 输出: object
    
  • 复杂场景方案:如果你有更复杂的动态表达式需求(比如需要组合多个值),也别用模板字符串包裹对象/数组,直接写原生JavaScript表达式即可。比如要返回数组的第一个元素,就写'op.items[0]',而非'${op.items[0]}'。

另外提醒一句:使用new Function时要格外注意安全,别把不可信的用户输入作为表达式传入,否则可能存在代码注入的风险哦~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:59:32