You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Code Signal矩阵求和问题:第二种JavaScript解法为何报错?

错误分析:Cannot read properties of undefined (reading 'length')

这是Code Signal上的一道矩阵求和题,要求实现函数,输入矩阵后返回所有不在0下方的元素之和。

示例矩阵:

matrix = [[1, 1, 1, 0], 
          [0, 5, 0, 1], 
          [2, 1, 3, 10]]

正确输出:solution(matrix) = 9

正确解法逻辑

以下代码可正常运行,核心是按列优先遍历:先遍历每一列,在每一列中从上到下累加元素,遇到0就停止该列的遍历:

function solution(matrix) {
    let sum = 0  
    for(j=0;j<matrix[0].length;j++){
        for(let i=0;i<matrix.length;i++){
            if(matrix[i][j]==0){
                break
            } else { 
                sum += matrix[i][j]
            }
        }
    }
    return sum
}

错误解法的问题根源

第二种解法的报错Uncaught TypeError: Cannot read properties of undefined (reading 'length'),完全是因为外层循环的终止条件写错了:

// 错误的终止条件
for(j=0;j<matrix[j].length;j++){

这里犯了两个关键错误:

  1. 混淆行/列索引逻辑:矩阵的结构是matrix[行号][列号],matrix[j]代表第j行,而非第j列的长度。
  2. 索引越界导致undefined:外层循环的j是列索引,取值范围应是0到列数-1(即matrix[0].length -1)。当矩阵列数大于行数时,j会超过矩阵的最大行索引,此时matrix[j]变为undefined,读取undefined.length自然触发类型错误。

拿题目示例矩阵举例:矩阵有3行(matrix.length = 3)、4列(matrix[0].length =4)。当j循环到3时,matrix[3]不存在(行索引最大为2),此时matrix[3]是undefined,尝试读取它的length就会抛出报错。

总结

遍历矩阵列时,列总数应取矩阵任意一行的长度(通常取第一行matrix[0].length,前提是矩阵非空且为矩形),而非用列索引j去访问matrix[j]的长度——这会在列数大于行数时直接触发索引越界,导致读取undefined的属性报错。

内容的提问来源于stack exchange,提问作者od507

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:25:47