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

JavaScript矩阵转置函数异常:结果不符合预期问题排查

问题原因

你遇到的问题核心在于数组填充方式错误:

let matrix = Array(colSize).fill(Array(keySize))

fill方法会将传入的同一个数组引用复制到matrix的每一个位置,也就是说matrix[0]、matrix[1]、matrix[2]、matrix[3]指向的是同一个数组对象。当你在循环里修改matrix[j][i]时,其实是在修改同一个数组的元素,最后所有行都会变成最后一次赋值的结果(也就是最后一列的数值)。

修复方案

需要为matrix的每一行创建独立的数组实例,避免引用共享。可以用以下几种方式:

方法1:使用Array.from创建二维数组

let suggestionsArray = [[1,2,3,4],[5,6,7,8], [9,10,11,12], [13,14,15,16]]
const keySize = suggestionsArray.length;
const colSize = suggestionsArray[0].length
// 用Array.from创建每行独立的数组
let matrix = Array.from({length: colSize}, () => Array(keySize))
for (let i = 0; i < keySize; i++) {
    for (let j = 0; j < colSize; j++) {
        matrix[j][i] = suggestionsArray[i][j]
    }
}
console.log(matrix)
return matrix

方法2:用循环初始化每一行

let suggestionsArray = [[1,2,3,4],[5,6,7,8], [9,10,11,12], [13,14,15,16]]
const keySize = suggestionsArray.length;
const colSize = suggestionsArray[0].length
let matrix = []
// 循环创建每行的空数组
for (let j = 0; j < colSize; j++) {
    matrix.push([])
}
for (let i = 0; i < keySize; i++) {
    for (let j = 0; j < colSize; j++) {
        matrix[j][i] = suggestionsArray[i][j]
    }
}
console.log(matrix)
return matrix

方法3:更简洁的数组映射写法

如果你想简化代码,也可以用数组的map方法直接生成转置矩阵:

let suggestionsArray = [[1,2,3,4],[5,6,7,8], [9,10,11,12], [13,14,15,16]]
const transposed = suggestionsArray[0].map((_, colIndex) => 
    suggestionsArray.map(row => row[colIndex])
)
console.log(transposed)
return transposed

修复后得到的转置矩阵会是符合预期的:

[
  [1,5,9,13],
  [2,6,10,14],
  [3,7,11,15],
  [4,8,12,16]
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:35:50