javascript - 使用边界条件检查二维数组中的附近点

标签 javascript arrays

我有一个程序可以检查数组数组中的坐标,并搜索附近的坐标以找到最近的 5 个具有“事件”的坐标。然而,当在网格的边缘时,在这个例子中 (0,0),我面临着同一事件被多次返回但距离不同的“距离”的问题(这个距离是曼哈顿距离)。

我认为发生这种情况是因为我设置了参数,如果它要检查的坐标在网格之外(小于 0),它的值将更改为匹配边界 (0)。

let check = (x, y, d) => {
        if (x > 20) {
            x = 20;
        }
        if (x < 0) {
            x = 0;
        }
        if (y > 20) {
            y = 20;
        }
        if (y < 0) {
            y = 0;
        }

        if (Main[x][y].event) {
            let info = {
                x: x - (xRange/2),
                y: y - (xRange/2),
                event: Main[x][y].event,
                distance: d,
                ticket: Main[x][y].tickets[0],
            }
            return info;
        } else {
            return false;
        }
    }

let findEvents = (x, y) => {
        let nearby = [];
        let info;

        // Check point x, y
        if (Main[x][y].event) {
            info = {
                    x: x - (xRange/2),
                    y: y - (xRange/2),
                    event: Main[x][y].event,
                    distance: 0,
                    tickets: Main[x][y].tickets,
            }
            nearby.push(info);
        }

        for (let d = 1; d <= 40; d++) {
            for (let i = 0; i < d + 1; i++) {

                info = check(x - d + i, y - i, d);

                if (info) {
                    nearby.push(info);
                }
                if ((nearby.length > 5) &&
                    (nearby[(nearby.length-1)].distance !=
                        nearby[(nearby.length-2)].distance)) {
                    return nearby.slice(0,-1);
                }

                info = check(x + d - i, y + i, d);

                if (info) {
                    nearby.push(info);
                }
                if ((nearby.length > 5) &&
                    (nearby[(nearby.length-1)].distance !=
                        nearby[(nearby.length-2)].distance)) {
                    return nearby.slice(0,-1);
                }
            }

            for (let i = 1; i < d; i++) {

                info = check(x - i, y + d - i, d);

                if (info) {
                    nearby.push(info);
                }
                if ((nearby.length > 5) &&
                    (nearby[(nearby.length-1)].distance !=
                        nearby[(nearby.length-2)].distance)) {
                        return nearby.slice(0,-1);
                }

                info = check(x + d - i, y - i, d);

                if (info) {
                    nearby.push(info);
                }
                if ((nearby.length > 5) &&
                    (nearby[(nearby.length-1)].distance !=
                        nearby[(nearby.length-2)].distance)) {
                        return nearby.slice(0,-1);
                }
            }
        }
        return nearby;
    }

关于如何避免这种情况的任何提示? (或者总体上清理我的代码 :D )

最佳答案

我还不完全理解您的 find_events 方法,但似乎可以避免您描述的问题,只要点在网格外,您就应该从 check 返回 false。因此:

let check = (x, y, d) => {
  if (x > 20 || x < 0 || y > 20 ||y < 0) {
    return false;
  }
...

关于javascript - 使用边界条件检查二维数组中的附近点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45315158/

相关文章:

javascript - 依赖 Content-Type : text/plain to mitigate malicious javascript execution in response? 是否安全

java - 从数组中找到元素的最低绝对总和

c - 是什么导致了这些默认数组值?

javascript - 引导模态拉伸(stretch)到整个页面宽度?

javascript - javascript 如何从 select-option 中的相同类名收集值?

javascript - 使双击相当于 Javascript 中的两次简单单击

PHP/jQuery - 如何将多维 PHP 数组转换为 JSON 字符串?

javascript - Jasmine toHaveBeenCalledWith 部分匹配

javascript - 自定义函数停止工作

c++ - 为什么 C 数组在传递给函数时具有错误的 sizeof() 值?