JavaScript如何判断数组对象属性与目标值的差值是否小于100
坐标接近判断实现方法
你需要的遍历判断逻辑可以按如下方式实现,注意两个核心要点:
- 计算坐标差值必须用
Math.abs()取绝对值,避免目标坐标比数组内坐标小的时候差值为负,导致小于100的判断失效 - 必须同时满足x轴、y轴差值都小于100,才符合坐标接近的要求
基础循环实现(逻辑最直观)
直接遍历数组每一项,计算差值做判断,找到符合条件的项可以直接终止循环,减少不必要的计算:
let existNearEnemy = false; for (const item of myArr) { const xGap = Math.abs(nearestEnemy.x - item.x); const yGap = Math.abs(nearestEnemy.y - item.y); if (xGap < 100 && yGap < 100) { existNearEnemy = true; break; } } if (existNearEnemy) { // 此处写匹配到接近坐标后的业务逻辑 }
数组方法简写实现
用数组原生的some()方法可以更简洁地实现判断,该方法会在找到第一个符合条件的项时自动停止遍历,返回布尔值:
const existNearEnemy = myArr.some(item => { return Math.abs(nearestEnemy.x - item.x) < 100 && Math.abs(nearestEnemy.y - item.y) < 100; }); if (existNearEnemy) { // 匹配成功后的逻辑 }
如果需要拿到匹配到的具体坐标对象,而不只是判断是否存在,可以替换为find()方法:
const nearTarget = myArr.find(item => { return Math.abs(nearestEnemy.x - item.x) < 100 && Math.abs(nearestEnemy.y - item.y) < 100; }); if (nearTarget) { // 可以直接访问nearTarget.id、nearTarget.x、nearTarget.y做后续处理 }
注意:不要直接写
nearestEnemy.x - item.x < 100,如果nearestEnemy.x比item.x小,差值会是负数,永远满足小于100的条件,判断逻辑会完全出错。
内容的提问来源于stack exchange,提问作者W4IT
相关产品推荐
相关产品推荐

