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

如何给对象数组添加新元素?解决ReferenceError报错问题

问题原因与解决方案

你碰到的ReferenceError: name is not defined错误其实很好解决,咱们一步步拆解清楚:

错误根源

你在返回成功提示的语句里用了name和value,但这两个根本不是当前作用域里的变量!

你在创建新对象时用的是自己定义的nname和nvalue变量,而对象里的name: nname只是把nname的值赋值给新对象的name属性——这个name只是对象的属性键名,不是可以直接在代码里引用的变量。属性键名和当前代码的变量完全是两回事,你不能把对象里的属性名当成代码变量来用,除非你专门把属性值存到变量里(但你已经存了,就是nname和nvalue)。

修正后的代码

我把你的代码格式化得更易读(紧凑代码很容易藏bug),同时修正了变量名的问题,还加了点输入校验:

exports.handle = function(input) {
  // 查找已有命令并返回对应值
  for(var i=0; i<cc.list.length; i++) {
    if(input === cc.list[i].name) {
      return cc.list[i].value;
    }
  }

  // 处理创建新命令的逻辑
  if(input.startsWith("create-cc")) {
    var namevalue = input.slice(10); // slice到末尾可以省略第二个参数
    var spaceloc = namevalue.indexOf(" ");
    
    // 校验输入格式:防止用户没输入空格分隔name和value
    if(spaceloc === -1) {
      return "Error: Please enter both name and value separated by a space.";
    }
    
    var nname = namevalue.slice(0, spaceloc);
    var nvalue = namevalue.slice(spaceloc+1);
    
    // 给数组添加新对象元素
    cc.list.push({ name: nname, value: nvalue });
    
    // 这里把错误的name/value换成实际定义的nname/nvalue
    return `Command successfully created! Typing \`Z!${nname}\` will output \`${nvalue}\` now!`;
  }

  return "Error.";
};

额外优化小建议

  • 用ES6模板字符串(反引号`)拼接字符串比加号更清晰,也不容易出错
  • 可以用find方法替代for循环,让代码更简洁:
    const existingItem = cc.list.find(item => item.name === input);
    if(existingItem) {
      return existingItem.value;
    }
    

内容的提问来源于stack exchange,提问作者Pritt Balagopal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:41:13