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

JavaScript如何从多维数组提取对角线生成指定嵌套数组

问题说明

给定如下3*3二维矩阵:

const arr = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

预期提取矩阵两条对角线元素,输出结构为[[1,5,9],[3,5,7]]的嵌套数组。原有实现代码运行后仅能得到值正确但顺序混乱的一维数组,无法满足要求。

错误原因

原有代码的问题点如下:

  • 初始化的结果数组是一维结构,没有预先创建分别存储主对角线、副对角线元素的两个子数组,所有匹配元素直接插入根数组,无法生成嵌套结构
  • 双重循环遍历所有矩阵单元格的逻辑冗余,副对角线索引递减的逻辑嵌套在内层循环中,打乱了元素的插入顺序,也没有对两条对角线的元素做分组存储
修正代码

矩阵对角线取值不需要遍历所有单元格,单次遍历行索引即可完成取值:主对角线元素的横纵坐标永远相等,即arr[i][i];副对角线元素的纵坐标为「矩阵长度-1-当前行索引」,即arr[i][arr.length - 1 -i]。直接将匹配到的元素存入对应子数组即可。

const arr = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]
// 初始化结果数组,内置两个子数组分别存储两条对角线的元素
const new_arr = [[], []]
const matrixLength = arr.length

for (let i = 0; i < matrixLength; i++) {
  // 主对角线元素存入第一个子数组
  new_arr[0].push(arr[i][i])
  // 副对角线元素存入第二个子数组
  new_arr[1].push(arr[i][matrixLength - 1 - i])
}

console.log(new_arr) // 输出 [[1,5,9],[3,5,7]]

拓展提示:如果使用场景中要求奇数阶矩阵的中心元素不重复存储,可以在插入副对角线元素前增加判断:当i !== matrixLength - 1 -i时再执行push操作即可,当前示例需求保留重复的中心元素,无需额外判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:31:18