Javascript:从另一个对象在Javascript中创建深度嵌套的对象

Javascript:从另一个对象在Javascript中创建深度嵌套的对象,javascript,arrays,nested,lodash,javascript-objects,Javascript,Arrays,Nested,Lodash,Javascript Objects,Javascript:如何从对象数组中动态创建深度嵌套的对象? 我可以实现一个级别的分离,但是代码已经变得相当复杂,我不知道如何实现第二个级别的分离 实际: [{ 布兰迪:1, 规格说明:“发动机”, 影音:3000 电视:1000, 品牌名称:“宝马”, id:1, 小组:“汽车”, 费用:20000.00, 货币:“美元”, 描述:“制造成本” }, { 布兰迪:1, 规格说明:“制动器”, 影音:1000, 电视:2000年, 品牌名称:“宝马”, id:1, .... }, { 布兰迪:

Javascript:如何从对象数组中动态创建深度嵌套的对象? 我可以实现一个级别的分离,但是代码已经变得相当复杂,我不知道如何实现第二个级别的分离

实际:

[{
布兰迪:1,
规格说明:“发动机”,
影音:3000
电视:1000,
品牌名称:“宝马”,
id:1,
小组:“汽车”,
费用:20000.00,
货币:“美元”,
描述:“制造成本”
},
{
布兰迪:1,
规格说明:“制动器”,
影音:1000,
电视:2000年,
品牌名称:“宝马”,
id:1,
....
},
{
布兰迪:2,
规格说明:“发动机”,
影音:1800,
电视:2500,
品牌名称:“奥迪”,
身份证号码:2
....
}
]
预期:

[{
小组:“汽车”,
id:1,
品牌:[{
布兰迪:1,
品牌名称:“宝马”,
规格:{
权力:[{
规格说明:“发动机”,
影音:3000,
电视:1000
},
{
规格说明:“制动器”,
影音:1000,
电视:2000
}
],
费用:{
描述:“制造成本”,
价值:20000.00,
货币:“美元”
}
}
},
{
布兰迪:2,
品牌名称:“奥迪”,
规格:{
权力:[
...
],
}
}
]
},
小组:“自行车”,
id:2,
品牌:[
....
]
]
这是我尝试过的,但只能在brandName I-e一级之前获得分组

函数genrows(组、组键){
return_uu.toPairs(groups).map([键,单位])=>({
[groupKey]:key,
单位
}))
}
函数gengroups(arr、iteratee、key){
const grouped=u.groupBy(arr,iteratee)
返回genrows(分组,键)
}
函数组数组(单位、道具){
让结果=[{
单位
}]
道具。forEach((道具,i)=>{
常量键=道具
常量iteratee=prop.iteratee | prop
结果=\ 0.flatte(
result.map(行=>{
返回gengroups(row.units、iteratee、key).map(group=>
//{…行,{[key]:组[key],单位:group.units}
({……行,
[键]:组[键],
单位:组。单位
}),
)
}),
)
})
返回展平(结果)
}
const groups=['brandName','id']//按键名分组
//它提取这些组标记以生成密钥,
所需常数=grouparray(实际,组);
有人能帮我解决如何动态实现这一点吗?如果你已经做到了这一点,非常感谢你花时间阅读,即使你帮不上忙


PS:为了进一步澄清,请让我知道,我的结果对象&也使用了lodash函数。

您可以采用一种经典方法,存储最后一组,在那里找到
id
,并使用此对象对品牌进行分组

var数据=[{brandId:1,规格描述:“发动机”,av:3000,电视:1000,品牌名称:“宝马”,id:1,集团:“汽车”,成本:20000.00,货币:“美元”,描述:“制造成本”},{brandId:1,规格描述:“制动器”,av:1000,电视:2000,品牌名称:“宝马”},{brandId:2,规格描述:“发动机”,av:1800,电视:2500,品牌名称:“奥迪”},
最后一组,
结果=数据.reduce((r,{brandId,spec_desc,av,tv,brandName,id,group,cost:value,currency,desc})=>{
if(id!==未定义)r.push(lastGroup={group,id,brands:[]});
var brand=lastGroup.brands.find(q=>q.brandId==brandId);
if(!brand)lastGroup.brands.push(brand={brandId,brandName,specs:{power:[],cost:{desc,value,currency}});
品牌.规格.电源.推送({spec_desc,av,tv});
返回r;
}, []);
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
@NinaScholz:是的,让我在问题本身中更新一下。顺便说一句,key“id”代表groupid非常感谢,@ninascholz。但是,我注意到您已经包括了
if(id!==undefined)
,并从输入中删除了
id
字段,以防连续对象的id相同。如果我在所有对象中再次引入id字段,则对同一id重复分组。是否有针对同一id的解决方法,即不删除id?如果数据未排序,则您可以找到类似于
品牌的
。效果非常好!再次感谢@Nina Scholz。你能推荐一些好的教程/路线图/资源来有效地学习JS并练习这些数据争论问题吗?还不太了解reduce和一些高级JS概念。