9

我有一段代码,其中包括:

var clusterCenters = [{"x": 1,"y": 1},{"x": 10,"y": 10}];
console.log(clusterCenters);

在 Chrome 26 中:

在此处输入图像描述

在 Firefox 21 中:

在此处输入图像描述

为什么会出现这个错误?

我猜错误必须在以下函数中。

function getKMeansInfo(k, mouseX, mouseY) {
    // choose cluster centers
    var clusterCenters = [{"x": 1,"y": 1},{"x": 10,"y": 10}];
    console.log(clusterCenters);

    for (iteration=0;iteration< 20;iteration++) {
        // for each object, check which cluster is nearest
        for (i=0; i<points.length; i++) {
            var distMin = 1000000;
            var clusterMin = 0;
            for(j=0; j<k; j++) {
                var dist = euklideanDist(clusterCenters[j], points[i]);
                if (dist < distMin) {
                    distMin = dist;
                    clusterMin = j
                }
            }
            points[i]["cluster"] = clusterMin;
        }

        // calculate center of cluster
        var clusterSum = new Array(k);
        for (i=0; i<k; i++) {
            clusterSum[i] = {"x":0, "y":0, "n":0};
        }
        for (i=0; i<points.length; i++) {
            clusterSum[points[i]["cluster"]]["x"] += points[i]["cluster"]["x"];
            clusterSum[points[i]["cluster"]]["y"] += points[i]["cluster"]["y"];
            clusterSum[points[i]["cluster"]]["n"] += 1;
        }
        for (i=0; i<k; i++) {
            if (clusterSum[i]["n"] > 0) {
                clusterCenters[i] = {
                    "x":clusterSum[i]["x"]/clusterSum[i]["n"],
                    "y":clusterSum[i]["y"]/clusterSum[i]["n"]};
            }
        }
    }

    return {"cluster":1, "radius":10};
}

完整源代码在GitHub 上

编辑:只有完整的例子仍然在线。

也欢迎任何有关使用 JavaScript 的建议(我是 JavaScript 新手)。

我刚刚认识到在上面的示例中使用浮点数可以减少错误……但错误仍然存​​在。因为我从不通过“x”或“y”进行划分,而只通过“n”(并且我在划分之前检查 n 是否为 0)我不知道如何获得 NaN。

4

1 回答 1

4

如前所述,控制台日志记录可能很棘手。特别是 Chrome 以实时格式显示单值对象。

如果您要多次记录以查看对象的演变,请使用以下命令:

 console.log (JSON.stringify (obj));

这将确保您在执行 console.log 时看到该值。这确实依赖于JSON.stringify复杂的递归对象并且会失败,因此这对例如 DOM 对象没有帮助。

调试 JavaScript

当你想调试 JavaScript 时,你可以使用带有 Firebug 的 Firefox 或 Chrome 及其内置的开发者工具。Ctrl你用++打开Shift它们I。它们看起来像这样:

在此处输入图像描述

使用开发人员工具,您可以设置断点,从而使调试更加容易。

于 2013-05-21T10:11:56.273 回答