Javascript 如何停止if语句中的循环
变量=[ { 尼克:Bob1, x:12, y:21 }, { 尼克:Bob2, x:20, y:21 }, { 尼克:Bob3, x:12, y:21 } ] 变量me={ x:19, y:20 } 对于敌人中的var x{ var敌人=敌人[x]; 如果Math.absme.x-friend.x找到匹配元素,则可以使用Arrayfind提前从循环返回 变量=[{ 尼克:Bob1, x:12, y:21 }, { 尼克:Bob2, x:20, y:21 }, { 尼克:Bob3, x:12, y:21 } ] 变量me={ x:19, y:20 } var敌军=敌军。findenemy=>Math.absme.x-敌军.x有一个布尔值,如found,它以false开头。当找到它时,将其设置为true并中断。然后在循环完成if found…else…之后,将打印移出循环,确保只获得一次 此外,您可以使用新方法对其进行大量压缩,该方法在内部基本上可以更快地完成相同的任务:Javascript 如何停止if语句中的循环,javascript,Javascript,变量=[ { 尼克:Bob1, x:12, y:21 }, { 尼克:Bob2, x:20, y:21 }, { 尼克:Bob3, x:12, y:21 } ] 变量me={ x:19, y:20 } 对于敌人中的var x{ var敌人=敌人[x]; 如果Math.absme.x-friend.x找到匹配元素,则可以使用Arrayfind提前从循环返回 变量=[{ 尼克:Bob1, x:12, y:21 }, { 尼克:Bob2, x:20, y:21 }, { 尼克:Bob3, x:12,
let found = enemies.some(enemy => enemyIsClose(enemy, me));
如果您确实需要查找哪一个敌人在附近,find(而不是some)将返回第一个敌人,filter(过滤器)将返回所有敌人。为了让您的代码检查敌人是否在附近,它需要遍历敌人的所有位置,这是无法避免的,但是如果您只想减少控制台日志的数量,您可以使用此代码:
var isEnemyFound = true;
for (let x of enemies) {
var enemy = enemies[x];
if ((Math.abs(me.x - enemy.x) <= 1 && Math.abs(me.y - enemy.y) <= 1)) {
console.log("Enemy In range");
break;
} else {
isEnemyFound = false;
}
}
if(!isEnemyFound){
console.log("Enemies not in range");
}
您只需使用Array.filter筛选对象并查找集合 变量=[ { 尼克:Bob1, x:12, y:21 }, { 尼克:Bob2, x:20, y:21 }, { 尼克:Bob3, x:12, y:21 } ] 变量me={ x:19, y:20 } var敌人=敌人。filteritem=>{
return me.x-item.x总的来说,这是一个更好的解决方案。上一个是我在飞行中做的。 试着玩一下,看看这是否是你需要的。我真的希望是: 如果你把你的me值改为'13',结果仍然是一样的,但是试着把它改为'14',比如,看看逻辑是如何运作的。这是一种过分的做法,但是如果你想提高你的游戏水平,这是一个很好的解决方案,因为你可以随时创造你想要的变化和可能性,只需调用next;in o为了创造下一个价值。只是一个建议。祝你好运 让敌人=[ {nick:Bob1,x:12,y:21}, {nick:Bob2,x:12,y:21}, {nick:Bob3,x:12,y:21} ]; 让我={ x:12, y:21 } 功能*范围{ 让x进入敌人{ 让敌人=敌人[x]; whileMath.absme.x-敌军.x.filter…[0]将给出与.find…(查找…)相同的结果,只是速度较慢。