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

为何修改matrix子数组元素后两个子数组同步变化?预期结果不符求助

问题原因与解决方案:数组元素修改时意外同步变化

你遇到的问题本质是JavaScript引用类型的特性导致的:

在JS里,数组属于引用类型,变量point存储的不是[0,0]这个数组本身,而是它在内存中的地址。当你循环执行matrix.push(point)时,其实是把同一个内存地址重复添加到了matrix里——也就是说,matrix[0]和matrix[1]指向的是同一个数组对象。所以不管你通过哪个索引修改数组内容,另一个都会跟着改变,因为它们根本就是同一个东西。

解决办法

每次循环都要创建一个新的数组,而不是重复添加同一个引用,常见实现方式有两种:

  1. 直接在push时创建新数组
let matrix = []

for (let x = 0; x < 2; x++){
    matrix.push([0, 0]) // 每次循环生成全新的数组
}

matrix[0][0] = 1
console.log(matrix) // 输出 [[1,0],[0,0]]
  1. 复制原数组的内容到新数组(适合原数组内容动态变化的场景)
let matrix = []
let point = [0, 0]

for (let x = 0; x < 2; x++){
    matrix.push([...point]) // 用扩展运算符复制point的内容到新数组
    // 也可以用 point.slice() 或者 Array.from(point) 实现复制
}

matrix[0][0] = 1
console.log(matrix) // 输出 [[1,0],[0,0]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:25:14