Javascript没有正确迭代数组?

时间:2014-05-15 14:51:05

标签: javascript arrays for-loop

所以我在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]

2 个答案:

答案 0 :(得分:7)

如果第一个对象匹配,您将只返回一个对象。如果它没有,你立即返回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;
};

答案 1 :(得分:4)

您的return false声明需要在for循环之后;否则,当第一个对象不匹配时,将返回false