Javascript 排序在D3层次结构中不起作用,即使我将a-b更改为b-a

Javascript 排序在D3层次结构中不起作用,即使我将a-b更改为b-a,javascript,d3.js,Javascript,D3.js,这是我的代码: var data2 = { name: "A1", children: [ { name: "C9", value: 600, }, { name: "C8", value: 110, }, { name: "C7", value: 120, }, { n

这是我的代码:

var data2 = {
  name: "A1",
  children: [
    {
      name: "C9",
      value: 600,
    },
    {
      name: "C8",
      value: 110,
    },
    {
      name: "C7",
      value: 120,
    },
    {
      name: "C6",
      value: 130,
    },
    {
      name: "C5",
      value: 140,
    },
    {
      name: "C4",
      value: 150,
    },
  ],
};

var root = d3
  .hierarchy(data2)
  .sum(function (d: any) {
    return d.size;
  })
  .sort(function (a: any, b: any) {
    return b.value - a.value;
  });

var packLayout = d3.pack();
packLayout.size([400, 400]);
packLayout.padding(20);

root.sum((d: any) => {
  return d.value;
});

packLayout(root);

var packNodes = d3
  .select("#pack g")
  .selectAll("g")
  .data(root.descendants())
  .enter()
  .append("g")
  .attr("class", "node")
  .attr("transform", (d: any) => {
    console.log("transform d: ", d);
    return "translate(" + [d.x, d.y] + ")";
  });

packNodes
  .append("circle")
  .classed("the-node", true)
  .attr("r", (d: any) => d.r)
  .style("fill", "rgba(255,255,255,0.2)")
  .style("stroke", "#2f2f2f");

packNodes
  .append("text")
  .attr("class", "label")
  .attr("dy", 4)
  .attr("dx", -8)
  .text((d) => (d.children === undefined ? d.data.name : ""));

我一直在尝试切换排序a-b和b-a,但没有任何效果,理想情况下,我只想这样做:但在旧版本中,我是d3新手,我想在v6中进行切换,而不是
b.value
a.value
,它必须是
b.data.value
a.data.value
。正如政府所说:

返回的节点和每个子体具有以下属性:

node.data—指定给构造函数的关联数据

以下是工作演示:

var数据2={
名称:“A1”,
儿童:[{
名称:“C9”,
价值:600,
},
{
名称:“C8”,
值:110,
},
{
名称:“C7”,
数值:120,
},
{
名称:“C6”,
价值:130,
},
{
名称:“C5”,
值:140,
},
{
名称:“C4”,
价值:150,
},
],
};
变量根=d3
.层次结构(数据2)
.排序(功能(a、b){
返回b.data.value-a.data.value;
});
console.log(root.children)

在创建层次结构之前,需要应用
排序

以下内容应适用于1:
var数据2={
名称:“A1”,
儿童:[{
名称:“C9”,
价值:600,
},
{
名称:“C8”,
价值:110,
},
{
名称:“C7”,
数值:120,
},
{
名称:“C6”,
价值:130,
},
{
名称:“C5”,
价值:140,
},
{
名称:“C4”,
价值:150,
},
],
};
data2=data2.children.sort(函数(a,b){
返回b.value-a.value;
});
变量根=d3
.层次结构(数据2);
console.log(root.data)
。作为控制台包装{最大高度:100vh!重要;}

你好,你能做一个代码沙盒吗?我刚刚试过,它不起作用:(如果您
console.log(root.data)
它仍然显示原始未排序的node@Parzival这是意料之中的,
root.data
只是原始数据集,它不会被层次结构方法改变:只对子节点进行排序,正如API明确指出的:“对该节点的子节点进行排序”。另外,您的答案中只有一个基本的
数组。prototype.sort
,它与您引用的文本无关。@GerardoFurtado谢谢您的消息。我认为OP需要一个排序的
根.data
,所以我只想说,您需要在创建分层布局之前应用排序。您是对的,
的文档中的ort
不相关。您好,谢谢,我正在查看:我无法将其转换为v6,您能帮我吗?