如何使用双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
相关产品推荐
相关产品推荐

