将变量的值赋给二维数组 [duplicate]

Assign values of variables to a 2d Array [duplicate]

提问人:Андрей Косенко 提问时间:11/17/2023 更新时间:11/17/2023 访问量:25

问:

我敢肯定这是一个简单的问题,尽管我很难找到全面的解释。 我正在尝试用来自不同地方的变量形式的数据填充 2d 数组,以便稍后写入范围。这些变量在遍历数据数组时会更改其值。因此,最后我只用这些变量的最新值填充数组,而不是它们在我分配 2d 数组中的位置时持有的值。

我隐约明白它必须与我将指向 o 内存插槽(或类似的东西)的指针写入数组而不是值有关,并且可以通过一些评估或新变量的构造来克服它,但我找不到全面的解释为什么/何时发生以及解决这个问题的最佳方法是什么。

例如,我有代码:

  var rowArray = [".", ".", ".", ".", ".", "."];
  var rangeArray = [];
  for (k = 0; k < 5; k++){
    for (var i = 0; i < 6; i++){ 
      rowArray[i] = ((i+1) *(k+1));
    }
  rangeArray.push(rowArray);
  }
  Logger.log(rangeArray);

它给出了输出: [[5.0, 10.0, 15.0, 20.0, 25.0, 30.0], [5.0, 10.0, 15.0, 20.0, 25.0, 30.0], [5.0, 10.0, 15.0, 20.0, 25.0, 30.0], [5.0, 10.0, 15.0, 20.0, 25.0, 30.0], [5.0, 10.0, 15.0, 20.0, 25.0, 30.0]]

而不是我想要的那个: [[1, 2, 3, 4, 5, 6], [2, 4, 6, 8, 10, 12], [3, 6, 9, 12, 15, 18], [4, 8, 12, 16, 20, 24], [5, 10, 15, 20, 25, 30]]

我可以通过将数组转换为字符串,然后从中构造数组来克服这个问题。

  var rowArray = [".", ".", ".", ".", ".", "."];
  var rangeArray = [];
  for (k = 0; k < 5; k++){
    for (var i = 0; i < 6; i++){ 
      rowArray[i] = ((i+1) *(k+1));
    }
  rangeArray.push(rowArray.toString().split(","));
  }
  Logger.log(rangeArray);

但这是一个工作,而不是一个解决方案。此外,对于实际代码来说,这将是非常麻烦和不可靠的,其中数组条目的值可能包含逗号本身。

那么你能解释一下如何将变量的当前值写入数组而不是指向它的指针吗?

javascript 谷歌应用脚本

评论


答:

0赞 TheMaster 11/17/2023 #1

每次声明新的可修改数组 - 在循环中:

  /*<ignore>*/console.config({maximize:true,timeStamps:false,autoScroll:false});/*</ignore>*/ 

  //Removed: var rowArray = [".", ".", ".", ".", ".", "."];
  const rangeArray = [];
  for (k = 0; k < 5; k++){
    const rowArray = [];// or if you want [".", ".", ".", ".", ".", "."];
    for (let i = 0; i < 6; i++){ 
      rowArray[i] = ((i+1) *(k+1));
    }
    rangeArray.push(rowArray);
  }
  console.log(rangeArray);
<!-- https://meta.stackoverflow.com/a/375985/ -->    <script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

另请参阅此处的其他方法:按值复制数组

评论

0赞 Андрей Косенко 11/17/2023
谢谢!您的答案和您提供的帖子的链接给了我我需要的全面答案。