Javascript D3复合键函数

Javascript D3复合键函数,javascript,d3.js,Javascript,D3.js,是否可以使用复合键函数连接数据?我希望使用名称和级别的组合来连接已排序的员工对象,这样交换两个员工的级别并重新连接会导致他们同时包含在退出选择和进入选择中(而不仅仅是更新选择)。我试过: var myData=[{“等级”:1,“团队成员”:“约翰·斯马格”,“舰船”:48},{“等级”:2,“团队成员”:“莱斯利·夸基”,“舰船”:46},{“等级”:3,“团队成员”:“茉莉双打”,“舰船”:32}; 功能日志(选择、操作){ console.log(操作,选择[0]。长度); } 函数连接(

是否可以使用复合键函数连接数据?我希望使用名称和级别的组合来连接已排序的员工对象,这样交换两个员工的级别并重新连接会导致他们同时包含在退出选择和进入选择中(而不仅仅是更新选择)。我试过:
var myData=[{“等级”:1,“团队成员”:“约翰·斯马格”,“舰船”:48},{“等级”:2,“团队成员”:“莱斯利·夸基”,“舰船”:46},{“等级”:3,“团队成员”:“茉莉双打”,“舰船”:32};
功能日志(选择、操作){
console.log(操作,选择[0]。长度);
}
函数连接(){
变量选择=d3。选择('body')。选择全部('p')。数据(myData,函数(d){
返回d[“团队成员”]+d[“排名”];
});
选择。每个功能(d){
console.log('更新',d);
});
selection.enter().append('p').text(函数(d){
返回d[‘船舶’];
}).每个功能(d){
控制台日志('entering',d);
});
selection.exit().remove().each(函数d){
console.log('退出',d);
});
}
join();
var temp=myData[1]['Rank'];
myData[1]['Rank']=myData[2]['Rank'];
myData[2]['Rank']=temp;
join()

关于第一个问题,是否可以使用复合键函数连接数据?对你正在这样做


至于第二个问题,一个元素不能同时出现在enter选择和exit选择中。“输入”选项用于不存在且需要添加的图元。退出选择适用于已存在但不再与数据匹配的数据。在d3中,这些集合将是独占的。我不确定为什么更新选择不能满足您的需要。

复合键功能可以工作,这不是问题所在

问题在于在再次调用
join
之前更改数据数组的方式。看看这个演示,整个对象都发生了更改,您将看到“输入”、“更新”和“退出”选项按预期工作:

var myData=[{
“排名”:1,
“团队成员”:“John Smag”,
“船舶”:48
}, {
“排名”:2,
“团队成员”:“Leslie Kwarki”,
“船舶”:46
}, {
“排名”:3,
“组员”:“茉莉花双人床”,
“船舶”:32
}];
功能日志(选择、操作){
console.log(操作,选择[0]。长度);
}
函数连接(){
变量选择=d3。选择('body')。选择全部('p')。数据(myData,函数(d){
返回d[“团队成员”]+d[“排名”];
});
选择。每个功能(d){
console.log('更新',d);
});
selection.enter().append('p').text(函数(d){
返回d[‘船舶’];
}).每个功能(d){
控制台日志('entering',d);
});
selection.exit().remove().each(函数d){
console.log('退出',d);
});
}
join();
var temp=myData[1];
myData[1]={
“排名”:3,
“团队成员”:“Leslie Kwarki”,
“船舶”:46
};
myData[2]={
“排名”:2,
“组员”:“茉莉花双人床”,
“船舶”:32
};
join()

更新选择错误,因为对
join()
的第二次调用中有两个以前不存在的唯一键。