Javascript ramdajs递归一个嵌套JSON

Javascript ramdajs递归一个嵌套JSON,javascript,ramda.js,Javascript,Ramda.js,假设我们有一个如上所述的嵌套数组。是否有特定的深度递归方法 而不是在函数中调用相同的函数或迭代循环;有没有迭代所有嵌套项的deepMap函数 某些内容完全遍历对象树 const arr = [1,2,[3,4,5,[6,7,[8,9],10]]]; 你可以 const arr=[1,2,3,4,5,6,7,8,9,10]]; 函数展平(arr){ 返回arr.reduce((a,b)=>{ if(数组的b实例) a=a.concat(展平(b)); 其他的 a、 推(b); 返回a; },

假设我们有一个如上所述的嵌套数组。是否有特定的深度递归方法

而不是在函数中调用相同的函数或迭代循环;有没有迭代所有嵌套项的deepMap函数

某些内容完全遍历对象树

const arr = [1,2,[3,4,5,[6,7,[8,9],10]]];
你可以

const arr=[1,2,3,4,5,6,7,8,9,10]];
函数展平(arr){
返回arr.reduce((a,b)=>{
if(数组的b实例)
a=a.concat(展平(b));
其他的
a、 推(b);
返回a;
}, []);
}
控制台日志(展平(arr))您可以使用方法在一个数组中展开嵌套数组

然后使用方法对所有新数组项应用函数

Ex:

const arr=[1,2,3,4,5,6,7,8,9,10]];
R.forEach(函数(e){
控制台日志(e);
},R.展平(arr))

拉姆达没有内置这样的东西。(我不知道我们该如何输入。)但编写自己的输入很容易:

R.deepMap(function(e){
   console.log(e)
});
//1,2,3,4,5,6,7,8,9,10

您可以在

上看到这一点。通常更容易将其分解为更小的功能,在本例中,将深度嵌套的数组展平,然后在其上进行映射

const arr = [1,2,[3,4,5,[6,7,[8,9],10]]]

const deepMap = (fn, xs) => map(x => is(Array, x) ? deepMap(fn, x) : fn(x), xs)

deepMap(n => n * n, arr) //=> [1, 4, [9, 16, 25, [36, 49, [64, 81], 100]]]

您希望实现什么?@marvel308更新。从问题中不清楚这是否重要,但此解决方案不保留初始嵌套结构。如果这不重要,那么这是一个比我的建议好得多的解决方案。但是保留结构并不是那么困难。是的,我假设,因为输出是逗号分隔的,它们意味着一个平面数组,尽管我同意这是不明确的
const deepMap = f => R.pipe(flatten, map(f))

deepMap(R.inc)(arr)
// -> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]