JavaScript中如何自动初始化多维数组?
JavaScript多维数组初始化的惯用写法
当你需要在循环中给多维数组的指定位置arr[x][y]添加元素,但x或y对应的数组可能尚未创建时,有几种针对数组类型(而非对象)的惯用处理方式:
基础检查初始化法
这是最直观、可读性最高的写法,逐层检查并初始化数组:
// 确保外层数组的x位置存在 if (!arr[x]) { arr[x] = []; } // 确保内层数组的y位置存在 if (!arr[x][y]) { arr[x][y] = []; } // 执行push操作 arr[x][y].push(z);
短路求值简化法
利用JavaScript的短路逻辑运算符,把初始化逻辑压缩成更紧凑的代码,功能和上面完全一致:
// 先初始化外层数组(若不存在),再初始化内层数组,最后push (arr[x] = arr[x] || [])[y] = arr[x][y] || []; arr[x][y].push(z);
也可以写成更简洁的单行逻辑:
(arr[x] || (arr[x] = []))[y] ? arr[x][y].push(z) : (arr[x][y] = [z]);
这种写法省去了显式if判断,但可读性稍弱,适合追求代码简洁度的场景。
遍历构建场景示例
如果是遍历一组结构化数据(比如[{x: 0, y: 1, z: 'a'}, {x: 0, y: 1, z: 'b'}, ...])来构建多维数组,可以这样写:
const arr = []; data.forEach(item => { const {x, y, z} = item; if (!arr[x]) arr[x] = []; if (!arr[x][y]) arr[x][y] = []; arr[x][y].push(z); });
注意:由于使用数组类型,若x或y是较大的数值,数组中会出现空位(empty),但这是数组的正常特性,不会影响后续元素的访问和操作。
内容的提问来源于stack exchange,提问作者joachim
相关产品推荐
相关产品推荐

