如何在TypeScript中向锯齿数组添加数据并解决push报错?
解决二维数组push时报错"Cannot read properties of undefined (reading 'push')"的问题
错误原因
你初始化的someArray: any[][] = [[]]是包含一个空数组的二维数组,但当循环的i值大于0时,someArray[i]并不存在(为undefined),自然无法调用push方法。
正确添加方法
方法1:直接推送完整子数组(推荐)
不需要先创建子数组再逐个添加元素,直接把整理好的子数组推送到二维数组中,代码更简洁高效:
// 初始化空二维数组(避免多余的空子数组) let someArray: any[][] = []; // 模拟循环场景,比如遍历数据源 for (let i = 0; i < 2; i++) { // 替换成你的实际属性值 const property1 = i === 0 ? "xyz" : "abc"; const property2 = i === 0 ? 123 : 234; const property3 = i === 0 ? 1.23 : 2.34; // 直接推送完整子数组 someArray.push([property1, property2, property3]); }
方法2:先初始化子数组再添加元素
如果需要分步往子数组中添加元素,必须先给someArray[i]赋值一个空数组,再调用push:
// 初始化空二维数组 let someArray: any[][] = []; for (let i = 0; i < 2; i++) { // 先创建空的子数组 someArray[i] = []; // 分步添加元素 someArray[i].push(i === 0 ? "xyz" : "abc"); someArray[i].push(i === 0 ? 123 : 234); someArray[i].push(i === 0 ? 1.23 : 2.34); }
注意事项
- 初始化二维数组时,建议用
[]而非[[]],后者会在数组中默认添加一个空的子数组,可能导致后续数据异常。 - 两种方法最终都能生成你需要的
[["xyz",123,1.23],["abc",234,2.34]]格式数据。
内容的提问来源于stack exchange,提问作者Shardul
相关产品推荐
相关产品推荐

