如何返回修改后的对象数组而不返回原始对象?

时间:2019-09-23 22:42:02

标签: javascript arrays object

我正在制作一个随机的迷宫生成器,并且除了return语句之外,我已经完成了所有工作。最后,我最初的计划是能够对此进行一些迷宫求解算法的测试,因此可以很好地显示它,但必须将迷宫作为代码进行访问。该函数本身会修改数组中的对象并起作用,但是返回时,这些对象均处于原始状态。

//This is the code with the irrelevant stuff removed
function generate() {
  var maze = []
  for(let y = 0; y < tiles[1]; y++) {
    let tempArr = [];
    for(let x = 0; x < tiles[0]; x++) {
      //l,u,r,and d are all whether or not you can pass through that side of the tile, v is whether or not the tile has been visited by the actual generation
      tempArr.push([{l:true,u:true,r:true,d:true,v:false}]);
    }
    maze.push(tempArr);
    //After this point, the array that is returned does not change
  }

  //Builds the walls on the edge of the square
  for(let y = 0; y < maze.length; y++) {
    for(let x = 0; x < maze[y].length; x++) {
      if(y == 0) {
        maze[y][x].u = false;
      }
      if(x == 0) {
        maze[y][x].l = false;
      }
      if(y == tiles[1]-1) {
        maze[y][x].r = false;
      }
      if(x == tiles[0]-1) {
        maze[y][x].d = false
      }
    }
  }

  let _x = 0;
  let _y = 0;

  for(let i = 0; i < tiles[0]*tiles[1]; i++) {
    //None of these changes are visible in the returned array
    maze[_y][_x].v = true;
    let running = true;
    while(running) {
      maze[_y][_x].v = true;
      let random = Math.floor(Math.random()*4)+1;
      if(random == 1) {//This is repeated for 2, 3, and 4
        if(maze[_y][_x-1] && !maze[_y][_x-1].v) {
          maze[_y][_x].l = true;
          maze[_y][_x-1].r = true;
          _x -= 1;
          continue;
        } else if(maze[_y][_x+1] && !maze[_y][_x+1].v) {
          maze[_y][_x].r = true;
          maze[_y][_x+1].l = true;
          _x += 1;
          continue;
        } else {
          random++
        }
      }
    }
  }

  return maze; //This returns the original array, regardless of any changes made
}

这不会给我带来任何错误,但是在3 x 3迷宫的情况下,我希望得到以下结果:

[[{u:false,l:false,d:false,r:true,v:true}],[{u:false,l:true,d:false,r:true,v:true}],[{u:false,l:true,d:true,r:false,v:true}]],
[[{u:false,l:false,d:true,r:true,v:true}],[{u:false,l:true,d:false,r:true,v:true}],[{u:true,l:true,d:false,r:false,v:true}]],
[[{u:true,l:false,d:false,r:true,v:true}],[{u:false,l:true,d:false,r:true,v:true}],[{u:false,l:true,d:false,r:false,v:true}]]

但获得仅包含以下内容的数组:

{d:true,l:true,r:true,u:true,v:false} 

0 个答案:

没有答案