Javascript 如何使用访问器函数(d)访问父级';s值多少?

Javascript 如何使用访问器函数(d)访问父级';s值多少?,javascript,d3.js,Javascript,D3.js,我有以下数据: 我希望d.parent.name显示每个数据的父项。这里的父母是“中部”、“北部”、“东部”等 但是,d.parent.name仅返回无法读取未定义的属性名。如何使用acessor函数获取父对象的name属性?d、 name返回子级的name属性 cells .append('title') .text(function (d) { return categoryKey + " : " + d.parent + "\n" + groupKey + " : " +

我有以下数据:

我希望
d.parent.name
显示每个数据的父项。这里的父母是“中部”、“北部”、“东部”等

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

cells
  .append('title')
  .text(function (d) {
    return categoryKey + " : " + d.parent + "\n" + groupKey + " : " + d.name + "\n" + sizeKey + " : " + toCommas(d.value)
  });
如果我使用d.parent,我会得到[object]:
这里的问题是,您使用的是层次结构数据,并且有一种情况下未定义
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
  });
如果存在以下情况,则可以使用三元组将其压缩为一行:

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

(代码未经测试)

您能否发布代码的最低版本但仍能正常工作?这几乎是肯定的,因为您使用的是分层数据结构,但使用包含的上下文进行故障排除会更容易。@ialarmedalien我相信您在前面的回答中已经有了我的项目代码。基本上我想添加一个标题工具提示,显示我发布的数据的父名称。啊,好的!最好将其添加到问题中,因为不是每个人都看到了您的其他问题。可能只需在SO上搜索
d3父节点
@ialarmedalien您的答案是正确的。我正要把它标记为正确的。然而,三元运算符版本中存在语法错误。关于“失踪”的事“
cells
  .append('title')
  .text(function (d) {
      return ( d.parent ? categoryKey + " : " + d.parent.name + "\n" : 'root node' )
      + groupKey + " : " + d.name + "\n" + sizeKey + " : " + toCommas(d.value)
    }