Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用对象数组(与子对象递归)构建一个对象_Javascript_Arrays_Object_Reduce - Fatal编程技术网

Javascript 使用对象数组(与子对象递归)构建一个对象

Javascript 使用对象数组(与子对象递归)构建一个对象,javascript,arrays,object,reduce,Javascript,Arrays,Object,Reduce,也许有人能帮上忙 我想做的是: 构建一个结果对象,该对象由数组中所有这些对象的所有属性/子对象组成 结果对象中始终只有数组 递归地构建这个对象(因为我不知道有多少层,也不知道对象的名称) 属性的顺序不相关 某些属性(如id)的可管理例外/黑名单 const arr=[{ id:0, 昵称:“Testnick 0”, 洛尔:{ 很好:“喜欢它”, }, 评级:{ abc:5, helloworld:2, }, }, { id:1, 昵称:“Testnick 2”, 评级:{ abc:4, m

也许有人能帮上忙

我想做的是:

  • 构建一个结果对象,该对象由数组中所有这些对象的所有属性/子对象组成
  • 结果对象中始终只有数组
  • 递归地构建这个对象(因为我不知道有多少层,也不知道对象的名称)
  • 属性的顺序不相关
  • 某些属性(如id)的可管理例外/黑名单
const arr=[{
id:0,
昵称:“Testnick 0”,
洛尔:{
很好:“喜欢它”,
},
评级:{
abc:5,
helloworld:2,
},
},
{
id:1,
昵称:“Testnick 2”,
评级:{
abc:4,
moep:1,
},
},
{
id:2,
昵称:“Testnick 3”,
评级:{
abc:40,
孙:20,,
另一个目标:{
tr:34,
子对象:{
sd:24,
},
},
},
},

];您可以减少给定数组,并针对嵌套对象递归迭代对象的键和值

函数设置值(目标、源){
Object.entries(source.forEach([k,v])=>{
if(v&&typeof v=='object'){
设置值(目标[k]=目标[k]|{},v);
}否则{
目标[k]=目标[k]| |[];
目标[k]。推送(v);
}
});
回报目标;
}
var data=[{id:0,昵称:“Testnick 0”,loel:{nice:'like it'},评级:{abc:5,helloworld:2},{id:1,昵称:'Testnick 2',评级:{abc:4,moep:1},{id:2,昵称:'Testnick 3',评级:{abc:40,sun:20,其他评级:{tr 34,subsubobj:{sd:24}],
结果=data.reduce(setValues,{});
控制台日志(结果)

.as console wrapper{max height:100%!important;top:0;}
到目前为止您尝试了什么?使用常量值来完成此操作,但由于我不知道级别数量和属性名称,需要找出另一种方法给我类型错误:target[k]。push有时不是函数,需要调试。但是谢谢。