我对js不太了解,但是我有一个经过稍微修改的代码,可以完全满足我的要求。所以这是我卡住的一部分。我有一些具有多个属性的视觉对象,这些属性中的大多数是将它们绘制在地图上所必需的,因此我不能comment
进行绘制。我还有一个函数可以打印对象on("mouseover")
的所有属性。我希望它只显示我想要的属性,而不是全部。
.on("mouseover", function(d) {
var out = "";
out += d.name + "<br /><br />";
for (v in d) {
out += (!Number.isNaN(Number(d[v])) ? v + ": " + Number(d[v]) + "<br />" : "");
}
document.getElementById("detail").innerHTML = out;
}
我了解这段代码的作用,但是约束for
循环或out
仅包含我想要的属性的最优雅的方法是什么?
当前结果
obj name
attrIwant1: value
attrIwant2: value
attrIwant3: value
attrIwant4: value
w: blah
x: blah
y: blah
z: blah
我只想显示到w:blah
。
答案 0 :(得分:0)
将您关心的属性放入集合中,然后在循环时查看d[v]
是否属于集合。
const set1 = new Set(['attrIWant1', 'attrIWant2']); // add the attributes here
for (v in d) {
if (set1.has(d[v])) {
// this is one we care about
}
}
在此处了解有关集合的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set
答案 1 :(得分:0)
如果您始终希望拥有相同数量的属性,则可以在out
中包含一定数量的<br />
时尽早终止循环。
在您的示例中,您要在拥有4个属性时停止,因此当out
包含6个<br />
时将终止循环。您的新for循环将是这样:
for (v in d) {
out += (!Number.isNaN(Number(d[v])) ? v + ": " + Number(d[v]) + "<br />" : "");
if (out.match(/<br \/>/g).length === 6) break;
}
这不是“优雅的”,但可能是您不告诉我d
是什么的最好的方法:^)