如何在JavaScript对象数组中声明值数组?解决push操作失效问题
问题分析与解决方案
你的代码之所以无法正常运行,核心问题在于操作前没有完成必要的初始化:空数组array在循环初始时没有任何元素,直接访问array[i]会得到undefined,自然没法读取它的data属性,更别说调用push方法了。
修正思路
要实现你预期的数组结构,需要先完成两个关键步骤:
- 在外层循环中,先向
array推入一个包含空data数组的对象,确保array[i]是有效的对象 - 再通过内层循环(或直接赋值)给
data数组填充目标值
方案1:直接生成预期结果(最直观)
如果你的目标数组内容是固定的,直接初始化即可:
var array = [ { data: [3, 2, 5] }, { data: [5, 2, 1] } ];
方案2:用循环动态生成(贴合你的代码思路)
如果需要通过循环动态填充值,修正后的代码如下:
var array = []; // 外层循环创建2个对象 for (let i = 0; i < 2; i++) { // 先推入一个带空data数组的对象 array.push({ data: [] }); // 内层循环给当前对象的data数组添加值 for (let j = 0; j < 3; j++) { // 根据索引匹配预期的数值 const targetValues = i === 0 ? [3, 2, 5] : [5, 2, 1]; array[i].data.push(targetValues[j]); } } console.log(array); // 输出:[ { data: [3,2,5] }, { data: [5,2,1] } ]
额外注意事项
- 避免全局变量污染:原代码中
i和j未用let/const声明,会变成全局变量,建议用let声明循环变量(块级作用域更安全) - 初始化要完整:在操作对象或数组的属性前,必须确保它们已经被创建,否则会抛出
Cannot read properties of undefined的错误
内容的提问来源于stack exchange,提问作者Jesus
相关产品推荐
相关产品推荐

