RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 897083
Accepted
Telion
Telion
Asked:2020-10-24 10:56:39 +0000 UTC2020-10-24 10:56:39 +0000 UTC 2020-10-24 10:56:39 +0000 UTC

更改数组的一个元素会覆盖整个数组

  • 772

该类有一个方法:

constructor(id) {
  this.position = [6, 4];
  this.LABYRINTH = init2DArray(8, 8, {lookaround: false, events: false});
  this.lookedaround.bind(this);
}

lookedaround() {
  //this.position задан в конструкторе: this.position = [6, 4];
  this.LABYRINTH[this.position[0]][this.position[1]].lookaround = true;
}

空白数组填充功能:

function init2DArray(xlen, ylen, data) {
  var ret = [];
  for (var x = 0; x < xlen; x++) {
    ret[x] = [];
    for (var y = 0; y < ylen; y++) {
      ret[x][y] = data;
    }
  }
  return ret;
}

当我简单地调用该方法时,lookedaround整个数组被覆盖,将每个值替换为true. 我不明白为什么会这样……

而已:

player.LABYRINTH.forEach((e, o) => {
  e.forEach((i, p) => {
    console.log(`[${o}, ${p}] = ${i.lookaround}`);
  });
});
[0, 0] = false
[0, 1] = false
[0, 2] = false
[0, 3] = false
[0, 4] = false
[0, 5] = false
[0, 6] = false
[0, 7] = false
[1, 0] = false
[1, 1] = false
[1, 2] = false
[1, 3] = false
[1, 4] = false
[1, 5] = false
[1, 6] = false
[1, 7] = false
[2, 0] = false
[2, 1] = false
[2, 2] = false
[2, 3] = false
[2, 4] = false
[2, 5] = false
[2, 6] = false
[2, 7] = false
[3, 0] = false
[3, 1] = false
[3, 2] = false
[3, 3] = false
[3, 4] = false
[3, 5] = false
[3, 6] = false
[3, 7] = false
[4, 0] = false
[4, 1] = false
[4, 2] = false
[4, 3] = false
[4, 4] = false
[4, 5] = false
[4, 6] = false
[4, 7] = false
[5, 0] = false
[5, 1] = false
[5, 2] = false
[5, 3] = false
[5, 4] = false
[5, 5] = false
[5, 6] = false
[5, 7] = false
[6, 0] = false
[6, 1] = false
[6, 2] = false
[6, 3] = false
[6, 4] = false
[6, 5] = false
[6, 6] = false
[6, 7] = false
[7, 0] = false
[7, 1] = false
[7, 2] = false
[7, 3] = false
[7, 4] = false
[7, 5] = false
[7, 6] = false
[7, 7] = false

player.lookedaround();

player.LABYRINTH.forEach((e, o) => {
  e.forEach((i, p) => {
    console.log(`[${o}, ${p}] = ${i.lookaround}`);
  });
});
[0, 0] = true
[0, 1] = true
[0, 2] = true
[0, 3] = true
[0, 4] = true
[0, 5] = true
[0, 6] = true
[0, 7] = true
[1, 0] = true
[1, 1] = true
[1, 2] = true
[1, 3] = true
[1, 4] = true
[1, 5] = true
[1, 6] = true
[1, 7] = true
[2, 0] = true
[2, 1] = true
[2, 2] = true
[2, 3] = true
[2, 4] = true
[2, 5] = true
[2, 6] = true
[2, 7] = true
[3, 0] = true
[3, 1] = true
[3, 2] = true
[3, 3] = true
[3, 4] = true
[3, 5] = true
[3, 6] = true
[3, 7] = true
[4, 0] = true
[4, 1] = true
[4, 2] = true
[4, 3] = true
[4, 4] = true
[4, 5] = true
[4, 6] = true
[4, 7] = true
[5, 0] = true
[5, 1] = true
[5, 2] = true
[5, 3] = true
[5, 4] = true
[5, 5] = true
[5, 6] = true
[5, 7] = true
[6, 0] = true
[6, 1] = true
[6, 2] = true
[6, 3] = true
[6, 4] = true
[6, 5] = true
[6, 6] = true
[6, 7] = true
[7, 0] = true
[7, 1] = true
[7, 2] = true
[7, 3] = true
[7, 4] = true
[7, 5] = true
[7, 6] = true
[7, 7] = true

javascript
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    user176262
    2020-10-24T11:17:22Z2020-10-24T11:17:22Z

    因为数组的所有元素都是对同一个对象的引用。

    function init2DArray(xlen, ylen, dataCreator) {
      var ret = [];
      for (var x = 0; x < xlen; x++) {
        ret[x] = [];
        for (var y = 0; y < ylen; y++) {
          ret[x][y] = dataCreator();
        }
      }
      return ret;
    }
    
    this.LABYRINTH = init2DArray(8, 8, function() {
      return { lookaround: false, events: false };
    });
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5