Javascript 如何访问由d3.groups生成的内部数组?

Javascript 如何访问由d3.groups生成的内部数组?,javascript,d3.js,Javascript,D3.js,我正在努力理解如何使用新的。我的目标是在d3.chart中添加一个下拉菜单。具体地说,当我选择一个选项时,图表会显示这个特定个体的数据。我的问题是我不明白如何访问所选个人的内部数组。例如,如果我选择bib nr.5,我想访问此人的比率分数 我为这个问题困扰了很长时间。我感谢你的帮助:) const data=d3.range(20.map)(i=>({ 围嘴:数学楼层(i/5)+1, 比率:-1+数学随机数()*5, 运行:[1,2,3,4,5][i%5], 名称:['GIRL1'、'GIRL

我正在努力理解如何使用新的。我的目标是在d3.chart中添加一个下拉菜单。具体地说,当我选择一个选项时,图表会显示这个特定个体的数据。我的问题是我不明白如何访问所选个人的内部数组。例如,如果我选择bib nr.5,我想访问此人的比率分数

我为这个问题困扰了很长时间。我感谢你的帮助:)

const data=d3.range(20.map)(i=>({
围嘴:数学楼层(i/5)+1,
比率:-1+数学随机数()*5,
运行:[1,2,3,4,5][i%5],
名称:['GIRL1'、'GIRL2'、'GIRL3'、'GIRL4'][数学楼层(i/5)]
}));
//现在我想使用d3.groups
常量滑雪者=d3.组(数据,d=>d.bib)
//记录这一点会给我一个嵌套数组。
控制台日志(滑雪者)
//我想访问特定个人的内部数组,但我如何才能做到这一点?
//我已尝试使用.map()
console.log(skiers.map(d=>d.run))//这给了我未定义的定义
用于获取
d[0]
等于您试图收集的
bib
的所有对象

const data=d3.range(20.map)(i=>({
围嘴:数学楼层(i/5)+1,
比率:-1+数学随机数()*5,
运行:[1,2,3,4,5][i%5],
名称:['GIRL1'、'GIRL2'、'GIRL3'、'GIRL4'][数学楼层(i/5)]
}));
常量滑雪者=d3.组(数据,d=>d.bib)
常数bibToFind=3;
//带对象的数组
const bibfind=skiers.filter(d=>d[0]==bibToFind);
//仅对象
const bibobobjects=bibfind[0][1];
console.log(bibfind,bibObjects)

使用
.map
时,只迭代嵌套数组的第一级

[
[//“d”是映射函数中的数组
1.
[
{
“围嘴”:1,
“比率”:0.6494187230703661,
"跑":一,,
“名称”:“GIRL1”
},
{
“围嘴”:1,
“比率”:-0.274039805959491158,
"跑":二,,
“名称”:“GIRL1”
},
{
“围嘴”:1,
“比率”:3.3705616486650136,
"跑":三,,
“名称”:“GIRL1”
},
{
“围嘴”:1,
“比率”:0.9649181479003297,
“跑”:4,
“名称”:“GIRL1”
},
{
“围嘴”:1,
“比率”:1.725901121023032,
“跑”:5,
“名称”:“GIRL1”
}
]
]
]
const data=d3.range(20.map)(i=>({
围嘴:数学楼层(i/5)+1,
比率:-1+数学随机数()*5,
运行:[1,2,3,4,5][i%5],
名称:['GIRL1'、'GIRL2'、'GIRL3'、'GIRL4'][数学楼层(i/5)]
}));
//现在我想使用d3.groups
常量滑雪者=d3.组(数据,d=>d.bib)
//记录这一点会给我一个嵌套数组。
console.log(滑雪者[0])//第一级
log(滑雪者[0][1])//第二级获取第二个元素
log(skiers[0][1][0])//这里有第一个对象
//因此,您可以映射嵌套数组的特定级别
console.log(滑雪者[0][1].map(d=>d.run))//没有未定义的mo
//或者,您可以将嵌套数组转换为简单数组,如果这是您想要的
console.log(“flatmap”,skiers.flatmap(d=>d[1]))
//和访问每个运行属性
console.log(“flatmap”,skiers.flatmap(d=>d[1]).map(d=>d.run))

d3.group
d3.groups
之间唯一的区别是前者返回一个数组,而后者返回一个数组。因此,如果使用
d3.group
,则只需获得数组(例如
bib
1)即可:

以下是演示:

const data=d3.range(20.map)(i=>({
围嘴:数学楼层(i/5)+1,
比率:-1+数学随机数()*5,
运行:[1,2,3,4,5][i%5],
名称:['GIRL1'、'GIRL2'、'GIRL3'、'GIRL4'][数学楼层(i/5)]
}));
//现在我想使用d3.groups
常量滑雪者=d3.group(数据,d=>d.bib)
const innerArray=skiers.get(1);
log(innerArray)

谢谢。最后,我想我明白了:)如果我想过滤一个特定的围嘴,那么我可以使用@0stone0的解决方案。干杯。我可以直接将地图输入d3选区吗?或者我需要将其转换为数组吗?@ChristianMagelssen如果你的意思是
selection.data()
,是的,你可以。
skiers.get(1);