我无法在数组

时间:2016-11-23 20:32:52

标签: javascript jquery arrays

我正在尝试构建一个扫雷游戏,我正在编写用于在数组中查找相邻元素的代码,它可以工作,但问题是这些项目不会存储在数组中。它只存储第一个元素。

我无法将相邻的单元存储在板阵列中。它只存储第一个元素[5.3]而不存储其他相邻的单元格。

为简单起见,我将用简单的值替换炸弹阵列

这是我尝试过的

$(document).ready(function() {
  adjSquares();

});

var mines = {
  fields: [[4,4]],
     x:4,
     y:4
  
};
var board = {
  x: null,
  y: null,
  fields: []
};

var adjSquares = function() {
  var adj = [
    [-1, 1],
    [-1, 0],
    [-1, -1],
    [0, 1],
    [0, -1],
    [1, 1],
    [1, 0],
    [1, -1]
  ];
  $.each(mines.fields, function(i, v) {
    /* iterate through array or object */
    var x =mines.fields.x;
    var y=mines.fields.y;


    $.each(adj, function(index, val) {
      /* iterate through array or object */
      var xx = board.x;
      var yy = board.y;

      if (x + val[0] > 0 && x + val[0] <= 9 && y + val[1] > 0 && y + val[1] <= 9) {
        xx = x + val[0];
        yy = y + val[1];
        board.fields=[xx, yy];

      }

    });


  });
  console.log(board.fields); 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

感谢Barmar,我现在可以将相邻的单元存储到board.fields数组中。我现在已经为mines.fields添加了更多的元素:[[4,4],[3,9],[2,1]]但是现在board.fields只存储了mines.fields的最后一个元素的相邻元素。 [2,1]而不是所有mines.fields的值

这是更新后的代码

$(document).ready(function() {
  adjSquares();
for(var i=1;i<10;i++){
    console.log(board.fields[i]); //shows 5,3}
}
});

var mines = {
  fields: [[4,4],[3,9],[2,1]],
  
};
var board = {
  x: null,
  y: null,
  fields: []
};

var adjSquares = function() {
  var adj = [
    [-1, 1],
    [-1, 0],
    [-1, -1],
    [0, 1],
    [0, -1],
    [1, 1],
    [1, 0],
    [1, -1]
  ];
  $.each(mines.fields, function(i, v) {
    /* iterate through array or object */
    

    $.each(adj, function(index, val) {
      /* iterate through array or object */
      var xx = board.x;
      var yy = board.y;

      if (v[0] + val[0] > 0 && v[0] + val[0] <= 9 && v[1] + val[1] > 0 && v[1] + val[1] <= 9) {
        xx = v[0] + val[0];
        yy = v[1] + val[1];
        board.fields.push([xx, yy]);

      }

    });


  });
  
  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

1 个答案:

答案 0 :(得分:0)

boards.fields = [xx, yy];

应该是:

boards.fields.push([xx, yy]);

你的代码只是在每次循环时都覆盖了数组。您需要使用.push()向数组添加新元素。

另一个问题是,每次通过外循环使用相同的mines.xmines.y。你应该使用你正在迭代的元素:

var x = v[0];
var y = v[1];