[英]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时,您可以将Firefox与Firebug或Chrome及其内置的开发人员工具一起使用。 你用Ctrl + Shift + I打开它们。 它们看起来像这样:
使用开发人员工具,您可以设置断点,使调试更容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.