为什么这两个空数组的填充方式不同?

霸王龙

我有这个代码。我什至用 console.logs 来调试它。但我真的不明白为什么他们的行为方式不同。为什么 result1 数组用最后一个数组值填充所有内部数组?

var myMatrix = [
  [0, 1, 2, 3],
  [4, 5, 6, 7],
  [8, 9, 10, 11],
  [12, 13, 14, 15]
];

function rotateMatrixClockwise(matrix) {
  var long = matrix.length;
  var result1 = new Array(long).fill([]);
  var result2 = [ [], [], [], [] ];
  console.log("Empty result1:");
  console.log(result1);
  console.log("Empty result2:");
  console.log(result2);
  for (var row = 0; row < long; row++) {
    for (var col = 0; col < long; col++) {
      result1[row][col] = matrix[long - col - 1][row];
      result2[row][col] = matrix[long - col - 1][row];
    }
  }
  console.log("Result1:");
  console.log(result1);
  console.log("Result2:");
  console.log(result2);
}

rotateMatrixClockwise(myMatrix);

尼娜·舒尔茨

您正在使用数组的相同对象引用填充数组

var result1 = new Array(long).fill([]);
//                                 ^^ same array for all elements

以后的任何分配都在同一个数组中进行。

在工作版本中,

var result2 = [[], [], [], []];
//             ^^  ^^  ^^  ^^  four different arrays

你需要四个不同的数组,它们没有引用同一个数组。

引用Array.fill声明了静态行为,而在 Javascript 中,对象是通过引用传递的。

fill()方法使用静态值填充数组从开始索引到结束索引的所有元素。

var myMatrix = [
  [0, 1, 2, 3],
  [4, 5, 6, 7],
  [8, 9, 10, 11],
  [12, 13, 14, 15]
];

function rotateMatrixClockwise(matrix) {
  var array = [];
  var long = matrix.length;
  var result1 = new Array(long).fill(array);
  var result2 = [[], [], [], []];
  console.log("Empty result1:");
  console.log(result1);
  console.log("Empty result2:");
  console.log(result2);
  for (var row = 0; row < long; row++) {
    for (var col = 0; col < long; col++) {
      result1[row][col] = matrix[long - col - 1][row];
      result2[row][col] = matrix[long - col - 1][row];
    }
  }
  console.log("Result1:");
  console.log(result1);
  console.log("Result2:");
  console.log(result2);
  console.log('array', array);
}

rotateMatrixClockwise(myMatrix)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JavaScript日期:为什么这两个日期不同?

来自分类Dev

为什么这两个DOMDocument函数的行为不同?

来自分类Dev

为什么这两个FParsec片段不同?

来自分类Dev

为什么这两个警报显示不同的值?

来自分类Dev

为什么这两个“ cat”命令的结果不同?

来自分类Dev

为什么这两个代码给出不同的输出

来自分类Dev

为什么这两个 DateTime 实例不同?

来自分类Dev

为什么这两个模板函数的输出不同?

来自分类Dev

为什么输出与这两个不同?

来自分类Dev

为什么这两个函数的结果不同?

来自分类Dev

R:为什么对于相同的点,来自两个不同软件的这两个不同的结果(拟合曲线)?

来自分类Dev

为什么这两个补码快捷方式有效?

来自分类Dev

为什么ReSharper不建议对这两个块都使用空传播?

来自分类Dev

为什么这两个float64具有不同的值?

来自分类Dev

为什么这两个golang整数转换函数给出不同的结果?

来自分类Dev

xUnit.net:为什么这两个等效测试会有不同的结果?

来自分类Dev

为什么这两个查询返回不同数量的行

来自分类Dev

为什么这两个python函数返回不同的结果?

来自分类Dev

为什么这两个“自动装箱”语句给出不同的结果?

来自分类Dev

为什么这两个右值引用示例具有不同的行为?

来自分类Dev

为什么这两个python正则表达式产生不同的结果?

来自分类Dev

为什么Google Analytics(分析)中这两个目标流之间的转化次数不同

来自分类Dev

为什么这两个代码片段会产生不同的价值?

来自分类Dev

为什么Scala编译器会不同地对待这两个代码块?

来自分类Dev

Postgres 9.6,时区:为什么这两个查询给我不同的时间

来自分类Dev

为什么这两个代码段会产生不同的图?

来自分类Dev

为什么这两个代码段给出不同的结果

来自分类Dev

为什么这两个应该相同的指针指向不同的数据?

来自分类Dev

为什么这两个C#脚本给出不同的结果?

Related 相关文章

  1. 1

    JavaScript日期:为什么这两个日期不同?

  2. 2

    为什么这两个DOMDocument函数的行为不同?

  3. 3

    为什么这两个FParsec片段不同?

  4. 4

    为什么这两个警报显示不同的值?

  5. 5

    为什么这两个“ cat”命令的结果不同?

  6. 6

    为什么这两个代码给出不同的输出

  7. 7

    为什么这两个 DateTime 实例不同?

  8. 8

    为什么这两个模板函数的输出不同?

  9. 9

    为什么输出与这两个不同?

  10. 10

    为什么这两个函数的结果不同?

  11. 11

    R:为什么对于相同的点,来自两个不同软件的这两个不同的结果(拟合曲线)?

  12. 12

    为什么这两个补码快捷方式有效?

  13. 13

    为什么ReSharper不建议对这两个块都使用空传播?

  14. 14

    为什么这两个float64具有不同的值?

  15. 15

    为什么这两个golang整数转换函数给出不同的结果?

  16. 16

    xUnit.net:为什么这两个等效测试会有不同的结果?

  17. 17

    为什么这两个查询返回不同数量的行

  18. 18

    为什么这两个python函数返回不同的结果?

  19. 19

    为什么这两个“自动装箱”语句给出不同的结果?

  20. 20

    为什么这两个右值引用示例具有不同的行为?

  21. 21

    为什么这两个python正则表达式产生不同的结果?

  22. 22

    为什么Google Analytics(分析)中这两个目标流之间的转化次数不同

  23. 23

    为什么这两个代码片段会产生不同的价值?

  24. 24

    为什么Scala编译器会不同地对待这两个代码块?

  25. 25

    Postgres 9.6,时区:为什么这两个查询给我不同的时间

  26. 26

    为什么这两个代码段会产生不同的图?

  27. 27

    为什么这两个代码段给出不同的结果

  28. 28

    为什么这两个应该相同的指针指向不同的数据?

  29. 29

    为什么这两个C#脚本给出不同的结果?

热门标签

归档