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

JavaScript中二维数组赋值异常问题求助

问题原因及解决方案

问题根源

你用new Array(inputTensor.length).fill(new Array(inputTensor[0].length))创建二维数组时,fill方法会把同一个数组实例赋值给外层数组的每一个位置。也就是说,transformedInputTensor里的所有子数组其实都是同一个对象的引用。所以当你修改transformedInputTensor[i][j]时,所有子数组的第j位都会跟着改变——因为它们本质上是同一个数组。

修复方案

有两种常用的方式解决这个问题:

方案一:使用map创建独立的子数组

替换初始化二维数组的代码:

var transformedInputTensor = new Array(inputTensor.length).fill(null).map(() => new Array(inputTensor[0].length));

这里先填充null(值类型,不会共享引用),再通过map为每个位置生成一个全新的子数组,保证每个子数组都是独立的。

方案二:在循环内初始化子数组

如果更倾向于在循环里处理,可以在外层循环中为每个i创建新的子数组:

var transformedInputTensor = new Array(inputTensor.length);
for(let i = 0; i < inputTensor.length; i++){
  // 每次循环都创建一个新的子数组
  transformedInputTensor[i] = new Array(inputTensor[0].length);
  for(let j = 0; j < inputTensor[0].length; j++ ){
    number = scale(inputTensor[i][j], inputMinArray[j], inputMaxArray[j], outMin, outMax);
    transformedInputTensor[i][j] = number;
  }
}

这样每个transformedInputTensor[i]都是独立的数组实例,修改其中的元素不会影响其他子数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:54:58