我无法弄清楚为什么数组方法'每一个'不在这里工作。 (在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;
}
似乎并未检查每个元素,因为只有两个对象被记录到控制台。
请帮忙。
感谢。
答案 0 :(得分:2)
这就是每件作品。它在找到假值时停止。见MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every
每个方法为每个方法执行一次提供的回调函数 元素存在于数组中,直到找到一个回调的元素 返回一个假值。如果找到这样的元素,则采用每种方法 立即返回false。
答案 1 :(得分:0)
以下是每个()
的示例
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;