Javascript 数组映射迭代中有什么错误

Javascript 数组映射迭代中有什么错误,javascript,arrays,json,ecmascript-6,nested,Javascript,Arrays,Json,Ecmascript 6,Nested,下面的代码没有返回平面数组,非常混乱,需要一个深度嵌套对象数组的平面数组 连接了JSFIDLE链接 const arr=[{ id:1, 名称:“XYZ 1” }, { id:2, 名称:“XYZ 2”, 儿童:[{ id:5, 名称:“XYZ 5” }, { id:6, 名称:“XYZ 6”, 年龄:29,, 儿童:[{ id:7, 名称:“XYZ 7” }, { id:8, 名称:“XYZ 8” }] }] }, { id:3, 名称:“XYZ 3” }, { id:4, 名称:“XYZ

下面的代码没有返回平面数组,非常混乱,需要一个深度嵌套对象数组的平面数组

连接了JSFIDLE链接

const arr=[{
id:1,
名称:“XYZ 1”
}, {
id:2,
名称:“XYZ 2”,
儿童:[{
id:5,
名称:“XYZ 5”
}, {
id:6,
名称:“XYZ 6”,
年龄:29,,
儿童:[{
id:7,
名称:“XYZ 7”
}, {
id:8,
名称:“XYZ 8”
}]
}]
}, {
id:3,
名称:“XYZ 3”
}, {
id:4,
名称:“XYZ 4”
}]
const flats=data=>data.map(e=>{
如果(如儿童){
返回[…单位(如儿童),e]
}否则{
控制台日志(“E”,E);
返回e
}
})

控制台。原木(平(arr))使用当前代码,有时会从回调返回数组:

return [...flats(e.children),e]
有时会返回一个普通对象:

else {console.log("E",e);return e }
因此,结果将是数组和普通对象的混合,而不是只包含对象的数组

改用
flatMap
,这将实现您正在寻找的平坦化。在返回子项之前,还需要从包含子项的项中删除
.children
属性

const arr=[{id:1,名字:“XYZ 1”},{id:2,名字:“XYZ 2”,孩子:[{id:5,名字:“XYZ 5”},{id:6,名字:“XYZ 6”,年龄:29,孩子:[{id:7,名字:“XYZ 7”},{id:8,名字:“XYZ 8”},{id:3,名字:“XYZ 3”},{id:4”};
const flats=data=>data.flatMap(e=>{
const{children,…objwithout children}=e;
返回儿童
?[…公寓(儿童),OBJ无儿童]
:e;
});
控制台。原木(平(arr))
需要一个深度嵌套的对象数组的平面数组

在这种情况下,我更倾向于使用递归的方法来获得灵活的高级数组

const arr=[{id:1,姓名:'XYZ 1'},{id:2,姓名:'XYZ 2',子项:[{id:5,姓名:'XYZ 5'},{id:6,姓名:'XYZ 6',年龄:29,子项:[{id:7,姓名:'XYZ 7'},{id:8,姓名:'XYZ 8'}]},{id:3,姓名:'XYZ 3'},{id:4'};
const recursive=(array)=>array.reduce((acc,{children=[],…others})=>{
acc.push(其他);
if(children.length>0)//此处的基递归。
acc=acc.concat(递归(子项));
返回acc;
}, []);

log(递归(arr))这里是一个使用

//const objectScan=require('object-scan');
const arr=[{id:1,名称:'XYZ 1'},{id:2,名称:'XYZ 2',子项:[{id:5,名称:'XYZ 5'},{id:6,名称:'XYZ 6',年龄:29,子项:[{id:7,名称:'XYZ 7'},{id:8,名称:'XYZ 8'}]},{id:3,名称:'XYZ 3'},{id:4'};
const flant=objectScan(['**(^children$).id']{
useArraySelector:false,
rtn:'父',
反面:错,
afterFn:(状态)=>{
state.result=state.result.map(({id,name})=>({id,name}));
}
});
控制台日志(展平(arr));
//=>[{id:1,名称:'XYZ 1'},{id:2,名称:'XYZ 2'},{id:5,名称:'XYZ 5'},{id:6,名称:'XYZ 6'},{id:7,名称:'XYZ 7'},{id:8,名称:'XYZ 8'},{id:3,名称:'XYZ 3'},{id:4,名称:'XYZ 4'}
。作为控制台包装{最大高度:100%!重要;顶部:0}

只需调用
flats(arr)。flat()
在代码中就足够了。是的。你可以通过点击滴答声来帮助我的读者在将来帮助读者。当回答解决了你的问题时,你可以考虑将投票和/或标记为被接受(检查左边的复选框)以表明问题得到解决: