遍历属性,但仅输出某些属性-javascript

时间:2018-10-16 18:48:37

标签: javascript for-loop attributes

我对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

2 个答案:

答案 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是什么的最好的方法:^)