var enemies = [
{
nick: "Bob1",
x: 12,
y: 21
},
{
nick: "Bob2",
x: 20,
y: 21
},
{
nick: "Bob3",
x: 12,
y: 21
}
]
var me = {
x: 19,
y: 20
}
for (var x in 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");
} else {
console.log("Enemies not in range");
}
}
大家好。我有一系列敌人,我正在检查是否有一些敌人与我的x或y位置相距1场。而且我只想登录一次,无论是否登录。如您现在所见,它检查每个敌人,并记录每个敌人。这不是我想要的。我只想简单地检查一下我的x或y位置是否有敌方1区域,并得到简单的回答“是”或“否”。我完全是新手,但是如果您对我有任何提示,那就太好了!
答案 0 :(得分:4)
具有一个以found
开头的布尔值,例如false
。找到它后,将其设置为true
和break
。然后循环后包含if (found) ... else ...
。这样会将打印移出循环,确保仅获得一次。
此外,您可以使用新的some
方法对其进行大量压缩,该方法在内部基本执行相同的操作(速度更快):
let found = enemies.some(enemy => enemyIsClose(enemy, me));
如果您实际上需要查找哪个敌人在附近,则find
而不是some
将返回第一个敌人,而filter
将返回所有敌人。
答案 1 :(得分:2)
如果找到匹配的元素,则可以使用Array#find
来从循环中尽早返回。
var enemies = [{
nick: "Bob1",
x: 12,
y: 21
},
{
nick: "Bob2",
x: 20,
y: 21
},
{
nick: "Bob3",
x: 12,
y: 21
}
]
var me = {
x: 19,
y: 20
}
var enemy = enemies.find(enemy => (Math.abs(me.x - enemy.x) <= 1 && Math.abs(me.y - enemy.y) <= 1));
if (typeof enemy !== undefined) {
console.log("Enemy In range");
} else {
console.log("Enemies not in range");
}
答案 2 :(得分:1)
为了让您的代码检查附近是否有敌人,它需要遍历敌人的所有位置,无法绕开它,但是如果您只想减少控制台日志的数量,则可以使用以下代码:
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");
}
答案 3 :(得分:1)
您可以简单地使用Array.filter
过滤对象并找到您的集合。
var enemies = [
{
nick: "Bob1",
x: 12,
y: 21
},
{
nick: "Bob2",
x: 20,
y: 21
},
{
nick: "Bob3",
x: 12,
y: 21
}
]
var me = {
x: 19,
y: 20
}
var enemy=enemies.filter(item=>{
return me.x-item.x<=1
})[0];
console.log(enemy);
答案 4 :(得分:1)
总体来说,这是一个更好的灵魂。前一个是我在飞行中做的。 尝试使用它,看看这是否是您需要的。我真的希望是:)
如果将( me - values )更改为'13',结果仍然相同,但是请尝试将其更改为'14',并查看逻辑如何发挥作用。这是一个过大的杀伤力,但是如果您想提高自己的游戏水平,那就是一个很好的解决方案,因为您可以随时创建任意数量的变体和可能性,只需调用next();
即可创建下一个值。只是一个建议。祝你好运!
let enemies = [
{nick: "Bob1", x: 12, y: 21},
{nick: "Bob2", x: 12, y: 21},
{nick: "Bob3", x: 12, y: 21}
];
let me = {
x: 12,
y: 21
}
function* range() {
for (let x in enemies) {
let enemy = enemies[x];
while(Math.abs(me.x - enemy.x) <=1 && Math.abs(me.y - enemy.y) <= 1) {
yield "Enemy is in range";
break; // closes iterator, triggers return
}
yield "Enemy is NOT in range";
break;
}
}
var gen = range(); // Creating a generator
console.log(gen.next().value); // Then we use it to get the next value