JS数组布尔值取反报错求助:含undefined元素时代码异常
问题修复:处理含undefined的二维数组布尔值取反
错误原因
你的代码报错是因为内层循环的条件判断顺序搞反了。当grid[i]是undefined的时候,你先去访问grid[i].length,这会直接触发Cannot read properties of undefined (reading 'length')的错误——毕竟undefined根本没有length这个属性。
修复后的代码
调整条件判断顺序,先检查当前元素是否为undefined,再处理子数组;同时可以简化undefined元素的处理逻辑(本来就不需要修改,直接跳过即可):
function flipGrid(grid) { for (let i = 0; i < grid.length; i++) { // 先判断当前项是否是undefined,是的话直接跳过内层循环 if (grid[i] === undefined) { continue; } for (let k = 0; k < grid[i].length; k++) { const item = grid[i][k]; if (item === true) { grid[i][k] = false; } else if (item === false) { grid[i][k] = true; } // undefined和其他元素保持原样,无需额外处理 } } return grid; } let grid = [ [true, false, undefined, true], [undefined, false, true, true], undefined, [undefined, undefined, false, false] ]; console.log(JSON.stringify(flipGrid(grid)));
运行结果
执行后输出:
[[false,true,undefined,false],[undefined,true,false,false],undefined,[undefined,undefined,true,true]]
和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Smit
相关产品推荐
相关产品推荐

