Angular中如何向JSON对象添加数组?测试案例问题排查
问题分析与解决方案
咱们先拆解下你测试案例2里的问题:
- 语法错误:你在
obj.staff_changes.push()的参数对象里直接写newStaff.push(...),这不仅语法不合法(对象属性值不能这么写),而且newStaff此时既不是obj的属性,也没有被定义为独立变量,浏览器会直接抛出ReferenceError: newStaff is not defined的错误。 - 逻辑偏差:你的目标是给
obj添加newStaff数组属性,但原代码里根本没有对obj.newStaff进行初始化和赋值的操作。
正确实现方式(给obj添加同级newStaff数组)
如果你的需求是让obj同时拥有staff_changes和newStaff两个同级的数组属性,代码应该这么写:
let obj = {staff_changes: []}; // 先给obj添加newStaff属性并初始化为空数组 obj.newStaff = []; for (let i = 0; i < 4; i++) { // 往staff_changes里添加元素 obj.staff_changes.push({ id: i }); // 往newStaff里添加对应的元素 obj.newStaff.push({ id: 'staff'+i }); } console.log(obj);
执行后,obj的结构会是:
{ staff_changes: [ { id: 0 }, { id: 1 }, { id: 2 }, { id: 3 } ], newStaff: [ { id: 'staff0' }, { id: 'staff1' }, { id: 'staff2' }, { id: 'staff3' } ] }
另一种可能的需求(每个staff项包含专属newStaff)
如果你其实是想让staff_changes里的每个对象都包含自己的newStaff数组,那代码可以改成这样:
let obj = {staff_changes: []}; for (let i = 0; i < 4; i++) { obj.staff_changes.push({ id: i, // 给每个staff项初始化newStaff数组并添加元素 newStaff: [{ id: 'staff'+i }] }); } console.log(obj);
此时obj.staff_changes里的每个元素都会有自己的newStaff数组,结构大概是:
{ staff_changes: [ { id: 0, newStaff: [ { id: 'staff0' } ] }, { id: 1, newStaff: [ { id: 'staff1' } ] }, // ... 其他项 ] }
内容的提问来源于stack exchange,提问作者Rahiman
相关产品推荐
相关产品推荐

