假设您要进行嵌套选择,并且您的
数据是一些数组,其中每个元素依次
包含一个数组,比方说“值”。然后你
可能有一些这样的代码:
var aInnerSelection = oSelection.selectAll(".someClass") //
.data(d.values) //
...
您可以将数组替换为新数组的值,其中
您缓存组内的索引。
var aInnerSelection = oSelection.selectAll(".someClass") //
.data(function (d, i) {
var aData = d.values.map(function mapValuesToIndexedValues(elem, index) {
return {
outerIndex: i,
innerIndex: index,
datum: elem
};
})
return aData;
}, function (d, i) {
return d.innerIndex;
}) //
...
假设您的外部数组如下所示:
[{名称“X”,值:[“A”,“B”]},{名称“y”,值:[“C”,“D”]}
使用第一种方法,嵌套选择会将您带到这里
d i
------------------------------------------------------------------
root dummy X {name "X", values: ["A", "B"]} 0
dummy Y {name "Y", values: ["C", "D"]} 1
到这里。
d i
------------------------------------------------------------------
root X A "A" 0
B "B" 1
Y C "C" 2
D "D" 3
使用扩充数组,您最终会出现在此处:
d i
------------------------------------------------------------------
root X A {datum: "A", outerIndex: 0, innerIndex: 0} 0
B {datum: "B", outerIndex: 0, innerIndex: 1} 1
Y C {datum: "C", outerIndex: 1, innerIndex: 0} 2
D {datum: "D", outerIndex: 1, innerIndex: 1} 3
所以你在嵌套选择中,在任何函数(d,i)中,所有
您需要的信息。