Javascript 将具有数组值的对象放入树中
我有一个对象数组,其中每个对象都有一个值数组。数据结构并不理想,但这是我访问它的唯一方式。我正在尝试将这个结构转换为树结构,这样我就可以构建一个D3缩进的可折叠表 我试图修改以前找到的一些答案,但尚未成功。这里有一个链接,指向我一直在研究的当前JSFIDLE 这是一个小例子,说明了我是如何得到这些数据的Javascript 将具有数组值的对象放入树中,javascript,json,tree,Javascript,Json,Tree,我有一个对象数组,其中每个对象都有一个值数组。数据结构并不理想,但这是我访问它的唯一方式。我正在尝试将这个结构转换为树结构,这样我就可以构建一个D3缩进的可折叠表 我试图修改以前找到的一些答案,但尚未成功。这里有一个链接,指向我一直在研究的当前JSFIDLE 这是一个小例子,说明了我是如何得到这些数据的 { "data": [ { "items": [ "All Other", "4C FOODS CORP" ],
{
"data": [
{
"items": [
"All Other",
"4C FOODS CORP"
],
"hints": {
"index": 0
}
},
{
"items": [
"All Other",
"PBNA"
],
"hints": {
"index": 14
}
},
{
"items": [
"All Other",
"PRIVATE LABEL"
],
"hints": {
"index": 15
}
},
{
"items": [
"Base Water",
"CCNA"
],
"hints": {
"index": 18
}
},
{
"items": [
"Base Water",
"CRYSTAL GEYSER"
],
"hints": {
"index": 19
}
}
]
}
我需要代码以如下方式完成:
[
{
"Category": "All Other",
"children": [
{
"name": "4C FOODS CORP"
},
{
"name": "PBNA"
},
{
"name": "PRIVATE LABEL"
}
]
},
{
"Category": "Base Water",
"children": [
{
"name": "CCNA"
},
{
"name": "CRYSTAL GEYSER"
}
]
}
]
一种解决方案是首先结合生成一个
对象
,用于按类别对元素进行分组,然后在第二步中对生成的对象条目
使用,以获得所需的输出:
const输入={
“数据”:[
{“项目”:[“所有其他”,“4C食品公司”],“提示”:{“索引”:0},
{“项目”:[“所有其他”、“PBNA”],“提示”:{“索引”:14},
{“项目”:[“所有其他”、“专用标签”],“提示”:{“索引”:15},
{“项目”:[“基础水”、“CCNA”],“提示”:{“索引”:18},
{“项目”:[“基础水”、“水晶间歇泉”],“提示”:{“索引”:19}
]
};
//按类别分组。
让res=input.data.reduce((acc,{items:[cat,val]})=>
{
acc[cat]=acc[cat]| |[];
acc[cat].push({name:val});
返回acc;
}, {});
//生成所需的输出结构。
res=Object.entries(res.map)([k,v])=>({category:k,children:v}));
控制台日志(res)代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装器{max height:100%!important;top:0;}
一个解决方案是首先结合使用生成一个对象
,用于按类别对元素进行分组,然后在第二步中对生成的对象条目
使用以获得所需的输出:
const输入={
“数据”:[
{“项目”:[“所有其他”,“4C食品公司”],“提示”:{“索引”:0},
{“项目”:[“所有其他”、“PBNA”],“提示”:{“索引”:14},
{“项目”:[“所有其他”、“专用标签”],“提示”:{“索引”:15},
{“项目”:[“基础水”、“CCNA”],“提示”:{“索引”:18},
{“项目”:[“基础水”、“水晶间歇泉”],“提示”:{“索引”:19}
]
};
//按类别分组。
让res=input.data.reduce((acc,{items:[cat,val]})=>
{
acc[cat]=acc[cat]| |[];
acc[cat].push({name:val});
返回acc;
}, {});
//生成所需的输出结构。
res=Object.entries(res.map)([k,v])=>({category:k,children:v}));
控制台日志(res)代码>
.as控制台{背景色:黑色!重要;颜色:石灰;}
.as控制台包装{max height:100%!important;top:0;}
它比树小,但更像是一个具有单个级别的分组。它比树小,但更像是一个具有单个级别的分组。