如何向嵌套在对象中的数组push元素?变量作键调用push报错如何解决
问题根因
你遇到的报错有两个核心触发原因:
- 函数内部重复声明了和入参同名的
category变量。Array.push()的返回值是新数组的长度(数字类型),赋值后原来存分类名的category变量会被覆盖为数字,后续如果再用这个变量访问数组就会报类型错误。 - 你提到打印结果是observer,说明你是在带响应式代理的框架(Vue/MobX等)环境下运行代码。如果传入的
category参数值没有提前在masterChecklist中声明,响应式对象返回的不是预期的数组类型,调用push自然失败。你硬编码键名能生效就是因为硬编码的键是提前定义好的。
修复代码
去掉多余的变量赋值即可,不需要接收push的返回值,还可以加一层容错判断避免传入不存在的分类时报错:
function SaveTaskDetails(name, notes, category) { const newTask = { name, notes, cleaned: false } if (Array.isArray(masterChecklist[category])) { masterChecklist[category].push(newTask) } }
如果是Vue2这类对动态新增属性支持不好的框架,新增分类时需要用框架提供的响应式API(比如this.$set(masterChecklist, 新分类名, []))来声明,才能正常操作数组。
内容的提问来源于stack exchange,提问作者Cade Gardner
相关产品推荐
相关产品推荐

