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

如何使用双for循环在JavaScript中创建成对比较二维矩阵

解决方法

首先你现有函数存在两个核心问题:

  • 函数内的return语句会在第一次判断时直接终止函数,完全无法完成二维矩阵的构建,应该把计算出的数值添加到对应行的数组中,再将行组装成完整矩阵。
  • 依赖全局变量object不够严谨,建议将对象数组作为参数传入函数。

以下是修正后的实现代码:

// 定义你的对象数组
const objectArray = [
  { id: 6 },
  { id: 1 },
  { id: 4 },
  { id: 3 },
  { id: 2 },
  { id: 5 }
];

const createMatrix = (arr) => {
  const matrix = [];
  for (let i = 0; i < arr.length; i++) {
    // 初始化当前行的空数组
    const row = [];
    for (let j = 0; j < arr.length; j++) {
      const idI = arr[i].id;
      const idJ = arr[j].id;
      if (idI > idJ) {
        row.push(1);
      } else if (idI < idJ) {
        row.push(-1);
      } else {
        row.push(0);
      }
    }
    // 将当前行添加到总矩阵中
    matrix.push(row);
  }
  return matrix;
};

// 生成目标矩阵
const resultMatrix = createMatrix(objectArray);

// 格式化输出为你需要的样式
resultMatrix.forEach(row => {
  console.log(row.map(num => num.toString().padStart(3, ' ')).join(''));
});

输出结果:

0   1   1   1   1  -1
 -1   0  -1  -1   1  -1
 -1   1   0  -1   1  -1
 -1   1   1   0   1  -1
 -1  -1  -1  -1   0  -1
  1   1   1   1   1   0

关键说明:

  • 先为每一行创建独立数组row,将每个位置的计算结果(1/-1/0)依次推入,再把行数组添加到总矩阵matrix中,最终返回完整的二维矩阵。
  • 使用padStart(3, ' ')格式化每个数字的显示宽度,确保和你示例的格式完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:15:33