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,您能帮我吗?