【问题标题】:Javascript not properly iterating over array?Javascript没有正确迭代数组?
【发布时间】:2014-05-15 14:51:04
【问题描述】:

所以我正在用 Javascript 制作一个类似 roguelike 的小游戏,但我的一段渲染代码出现了错误。不是渲染本身,而是它的一小部分迭代对象数组,检查是否有任何对象的坐标与 x 和 y 参数匹配,如果坐标匹配则返回对象。

这是给我带来麻烦的代码

Client.Render.checkObjects = function(objects, x, y) {
    for (var a = 0; a < objects.length; a++) {
        if (objects[a].x == x && objects[a].y == y) {
            return objects[a];
        } else {
            return false;
        }
    }
};

我有一个名为 testSnap.objects 的对象数组,我是这样制作的:

function testObject(x, y) {
    this.x = x;
    this.y = y;
    this.symbol = "a";
};
testSnap.objects.push(new testObject(5,5));
testSnap.objects.push(new testObject(3,5));

那我试试

console.log(Client.Render.checkObjects(testSnap.objects, 5, 5));
console.log(Client.Render.checkObjects(testSnap.objects, 3, 5));

返回:

Object { x: 5, y: 5, symbol: "a" }
false

似乎objects[a] 永远不是objects[1]

【问题讨论】:

  • checkObjects 在第一次迭代中返回false,在它到达objects[1]之前
  • 是的,这就是问题所在。 return 将取消您的迭代。很好解释的问题待定

标签: javascript arrays for-loop


【解决方案1】:

只有当 first 对象匹配时,你才会返回一个对象。如果没有,您将立即返回 false。试试:

Client.Render.checkObjects = function(objects, x, y) {
  for (var a = 0; a < objects.length; a++) {
    if (objects[a].x == x && objects[a].y == y) {
        return objects[a];
    }
  }

  // NOW return false if we never matched
  return false;
};

【讨论】:

    【解决方案2】:

    您的return false 语句必须在您的for 循环之后;否则当第一个对象不匹配时,将返回false

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 2022-10-07
      • 2012-03-30
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 2017-03-12
      相关资源
      最近更新 更多