javascript - 如何使用访问器函数(d)来访问父级的值?

标签 javascript d3.js

我有这个数据:https://api.myjson.com/bins/xibvo

cells
  .append('title')
  .text(function (d) {
    return categoryKey + " : " + d.parent.name + "\n" + groupKey + " : " + d.name + "\n" + sizeKey + " : " + toCommas(d.value)
  });

我希望 d.parent.name 显示每个数据的父级。这里的父级是“Central”、“North”、“East”等。

但是,d.parent.name只是返回无法读取未定义的属性名称。如何使用 acessor 函数获取父级的 name 属性? d.name 返回 child 的 name 属性。

cells
  .append('title')
  .text(function (d) {
    return categoryKey + " : " + d.parent + "\n" + groupKey + " : " + d.name + "\n" + sizeKey + " : " + toCommas(d.value)
  });

如果我使用 d.parent,我会得到 [object Object] : enter image description here

最佳答案

这里的问题是您正在使用分层数据,并且在一种情况下未定义 d.parent:层次结构的根节点。不过,修复起来很简单:只需检查父节点是否存在即可:

cells
  .append('title')
  .text(function (d) {
    if ( d.parent ) {
      return categoryKey + " : " + d.parent.name + "\n" + groupKey + " : " + d.name + "\n" + sizeKey + " : " + toCommas(d.value)
    }
    return d.name; // or whatever you want to do for the root node case
  });

您可以使用三元 if-else 将其压缩为一行:

cells
  .append('title')
  .text(function (d) {
      return ( d.parent ? categoryKey + " : " + d.parent.name + "\n" : 'root node' )
      + groupKey + " : " + d.name + "\n" + sizeKey + " : " + toCommas(d.value)
    }

(代码未经测试)

关于javascript - 如何使用访问器函数(d)来访问父级的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52418489/

相关文章:

javascript - 将 var 设置为 .text()

javascript - Openlayers 3,将特征数组应用于 getId() 中的矢量结果不是函数

javascript - 在 Angular v1.1 中显示错误的日期转换

javascript - 如何过滤掉 Protractor 中启用的按钮?

d3.js - 更新 dc.js 数据并重新应用原始过滤器

javascript - 需要帮助使用 d3.js 创建堆积条形图

javascript - d3 hexbin 缩放问题

javascript - 在客户端js中导入代码;在当前范围内,在任何位置

javascript - D3表中的数据排序

javascript - 使用 d3 或 ajax 读取本地文件文本(制表符分隔值)会导致 Firefox 开发控制台出现语法错误