为什么JavaScript不是每个方法都有效?

时间:2017-06-19 02:53:25

标签: javascript arrays

我无法弄清楚为什么数组方法'每一个'不在这里工作。 (在roguelike dungeon爬虫游戏上工作。)

我有一个像这样的对象数组:

   { 
    x: newrm.x,
    y: newrm.y + 10,
    w: newrm.w,
    h: newrm.h,
    centerx: newrm.centerx, 
    centery: newrm.centery + 10
   }

我试图做的就是测试这个新数组中的每个元素是否通过Every方法传递了一个跟随测试(这是防止玩家与墙壁发生碰撞):

if (newdraw.every(isWithin)) {
    ctx2.clearRect(0, 0, width, height);
    this.setState({ dungeon: newdraw });
}
function isWithin(obj) {
  console.log('this is the obj and this is the player', obj, player);
  return obj.x < player.x + player.w && obj.x + obj.w > player.x && obj.y < player.y + player.h && obj.h + obj.y > player.y;
}

似乎并未检查每个元素,因为只有两个对象被记录到控制台。

请帮忙。

感谢。

2 个答案:

答案 0 :(得分:2)

这就是每件作品。它在找到假值时停止。见MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

  

每个方法为每个方法执行一次提供的回调函数   元素存在于数组中,直到找到一个回调的元素   返回一个假值。如果找到这样的元素,则采用每种方法   立即返回false。

答案 1 :(得分:0)

以下是每个()

的示例

&#13;
&#13;
var data = [{
    "name": "Look",
    "lastName": "Alike",
    "email": "lookalike@gmail.com"
  },
  {
    "name": "Matt",
    "lastName": "Kaddy",
    "email": "mkad@gmail.com"
  }
]

var newData = {
  "name": "Different",
  "lastName": "Person",
  "email": "lookalike@gmail.com"
}


data.every(function(x) {
  if ( ( x.email.toLowerCase()) === ( newData.email.toLowerCase()) ) {
    console.log("Stops here because it is return false")
    return false;
  }
  //If its return true it will below the below log.
  console.log(x);
});
&#13;
&#13;
&#13;