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

如何实现矩阵对角线和绝对差计算函数?JS代码输出NaN问题排查

矩阵对角线和绝对差函数的NaN问题解决

需求说明

需要实现一个函数,接收二维整数数组,计算主、副对角线元素和的绝对差。例如输入:

[
  [4, 5, 1],
  [2, 5, 6],
  [9, 8, 9]
]

计算逻辑:

  • 主对角线和:4+5+9=18
  • 副对角线和:1+5+9=15
  • 绝对差:|18-15|=3
    预期输出为3。

问题代码

编写的JavaScript代码运行后输出NaN:

function Difference(arr) {
  var n = arr.length;
  var d1;
  var d2;
  for (var i = 0; i < n; i++) {
    for (var j = 0; j < n; j++) {
      // finding the sum of primary diagonal         
      if (i == j) {
        d1 += arr[i][j];
      }
      // finding the sum of secondary diagonal         
      if (i + j == n - 1) {
        d2 += arr[i][j];
      }
    }
  }
  return Math.abs(d1 - d2);
}

console.log(Difference([
  [4, 5, 1],
  [2, 5, 6],
  [9, 8, 9]
]))

问题根源

变量d1和d2未初始化,默认值为undefined。当执行d1 += arr[i][j]时,相当于undefined + 数字,结果会变成NaN,后续所有运算都会保留NaN,最终返回NaN。

修复方案

方案1:初始化求和变量

给d1和d2初始赋值为0,原逻辑不变:

function Difference(arr) {
  var n = arr.length;
  var d1 = 0; // 初始化为主对角线和的初始值
  var d2 = 0; // 初始化为辅对角线和的初始值
  for (var i = 0; i < n; i++) {
    for (var j = 0; j < n; j++) {
      if (i == j) {
        d1 += arr[i][j];
      }
      if (i + j == n - 1) {
        d2 += arr[i][j];
      }
    }
  }
  return Math.abs(d1 - d2);
}

console.log(Difference([
  [4, 5, 1],
  [2, 5, 6],
  [9, 8, 9]
])) // 输出3

方案2:优化循环(更高效)

不需要嵌套循环,主对角线的位置是arr[i][i],副对角线的位置是arr[i][n-1-i],一层循环即可完成求和:

function Difference(arr) {
  var n = arr.length;
  var d1 = 0;
  var d2 = 0;
  for (var i = 0; i < n; i++) {
    d1 += arr[i][i]; // 主对角线元素
    d2 += arr[i][n - 1 - i]; // 副对角线元素
  }
  return Math.abs(d1 - d2);
}

console.log(Difference([
  [4, 5, 1],
  [2, 5, 6],
  [9, 8, 9]
])) // 输出3

内容的提问来源于stack exchange,提问作者Mu'adhim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 16:20:20