繁体   English   中英

插入1后,数组中字典中的数字怎么能直接为NaN?

[英]How can a number in a dictionary in an array be NaN directly after I inserted 1?

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

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。

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

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

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

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

调试JavaScript

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

在此输入图像描述

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM