Javascript 我将如何改变这一点?
我想为下面的转换找到一个很好的优雅的解决方案。如何以最简单的方式(可选地使用函数库Ramda)最好地实现这一点Javascript 我将如何改变这一点?,javascript,ramda.js,Javascript,Ramda.js,我想为下面的转换找到一个很好的优雅的解决方案。如何以最简单的方式(可选地使用函数库Ramda)最好地实现这一点 const data = [ { id: 'a', }, { id: 'b', routes: [ { id: 'c', }, { id: 'd', routes: [ { id: 'e', }
const data = [
{
id: 'a',
},
{
id: 'b',
routes: [
{
id: 'c',
},
{
id: 'd',
routes: [
{
id: 'e',
}
]
}
]
}
];
const expected = [
{
id: 'a',
},
{
id: 'b',
},
{
id: 'c',
},
{
id: 'd',
},
{
id: 'e',
}
];
下面是一个普通的JS解决方案,使用
reduce
和递归:
const数据=[
{
id:'a',
},
{
id:'b',
路线:[
{
id:'c',
},
{
id:'d',
路线:[
{
id:'e',
}
]
}
]
}
];
const transform=arr=>arr.reduce((a,{id,routes})=>(
[…a,{id},…变换(路由| |[])]
), []);
console.log(转换(数据))代码>这是一个普通的JS解决方案,使用reduce
和递归:
const数据=[
{
id:'a',
},
{
id:'b',
路线:[
{
id:'c',
},
{
id:'d',
路线:[
{
id:'e',
}
]
}
]
}
];
const transform=arr=>arr.reduce((a,{id,routes})=>(
[…a,{id},…变换(路由| |[])]
), []);
console.log(转换(数据))代码>JS中的解决方案,没有太多的传播
函数getFlat(数组=[]){
返回array.reduce((r,{id,routes})=>r.concat({id},getFlat(routes)),[]);
}
常量数据=[{id:'a',},{id:'b',路由:[{id:'c',},{id:'d',路由:[{id:'e',}]}];
console.log(getFlat(data))代码>
.as控制台包装{max height:100%!important;top:0;}
JS中的一个解决方案,没有太多的扩展
函数getFlat(数组=[]){
返回array.reduce((r,{id,routes})=>r.concat({id},getFlat(routes)),[]);
}
常量数据=[{id:'a',},{id:'b',路由:[{id:'c',},{id:'d',路由:[{id:'e',}]}];
console.log(getFlat(data))代码>
.as console wrapper{max height:100%!important;top:0;}
这里的其他建议的替代方法是使用展开每个嵌套路由集
const fn = R.chain(({routes = [], ...rest}) => [{...rest}, ...fn(routes)])
一旦变得可用,这种方法也可以通过普通JS实现
const fn = (xs = []) => xs.flatMap(({routes, ...rest}) => [{...rest}, ...fn(routes)])
此处其他建议的替代方法是使用展开每个嵌套管线集
const fn = R.chain(({routes = [], ...rest}) => [{...rest}, ...fn(routes)])
一旦变得可用,这种方法也可以通过普通JS实现
const fn = (xs = []) => xs.flatMap(({routes, ...rest}) => [{...rest}, ...fn(routes)])
是否需要Ramda?嗯,我对其中任何一个都感兴趣。我更新了问题,以便不规定使用Ramda。非常感谢您在@CertainPerformanceIs Ramda required上花费的时间?嗯,我对其中任何一个都感兴趣。我更新了问题,以便不规定使用Ramda。非常感谢您在@CertainPerformancence上花费的时间,如果对象中有其他属性,并且属性名称“routes”可以传递到函数中,这将如何工作?请参阅编辑,如果希望在runtimeNice中指定包含嵌套对象的属性的名称,请使用括号表示法。如果在对象中有其他属性,并且可以将属性名称“routes”传递给函数,则如何使用括号表示法?请参见编辑,如果希望在运行时指定包含嵌套对象的属性的名称,请使用括号表示法