ramdajs 递归一个嵌套 JSON
ramdajs recursion one nested JSON
const arr = [1,2,[3,4,5,[6,7,[8,9],10]]];
假设我们有一个像上面那样的嵌套数组。有没有具体的深度递归方法?
而不是在函数中调用同一个函数或者迭代循环;是否有迭代所有嵌套项的 deepMap 函数?
有些东西完全遍历了对象树。
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]]];
function flatten(arr){
return arr.reduce((a, b) => {
if(b instanceof Array)
a = a.concat(flatten(b));
else
a.push(b);
return a;
}, []);
}
console.log(flatten(arr));
您可以使用 R.flatten 方法将嵌套数组平放在一个数组中。
然后使用 R.forEach 方法对所有新数组项应用一个函数。
例如:
const arr = [1,2,[3,4,5,[6,7,[8,9],10]]];
R.forEach(function (e) {
console.log(e);
}, R.flatten(arr))
<script src="//cdn.jsdelivr.net/ramda/latest/ramda.min.js"></script>
Ramda 中没有内置这样的东西。 (我不太清楚我们将如何键入输入。)但是编写您自己的内容很容易:
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]]]
您可以在 Ramda REPL
上看到实际效果
通常更容易将其分解为更小的功能位,在本例中,展平深度嵌套的数组,然后在其上进行映射。
const deepMap = f => R.pipe(flatten, map(f))
deepMap(R.inc)(arr)
// -> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
const arr = [1,2,[3,4,5,[6,7,[8,9],10]]];
假设我们有一个像上面那样的嵌套数组。有没有具体的深度递归方法?
而不是在函数中调用同一个函数或者迭代循环;是否有迭代所有嵌套项的 deepMap 函数?
有些东西完全遍历了对象树。
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]]];
function flatten(arr){
return arr.reduce((a, b) => {
if(b instanceof Array)
a = a.concat(flatten(b));
else
a.push(b);
return a;
}, []);
}
console.log(flatten(arr));
您可以使用 R.flatten 方法将嵌套数组平放在一个数组中。
然后使用 R.forEach 方法对所有新数组项应用一个函数。
例如:
const arr = [1,2,[3,4,5,[6,7,[8,9],10]]];
R.forEach(function (e) {
console.log(e);
}, R.flatten(arr))
<script src="//cdn.jsdelivr.net/ramda/latest/ramda.min.js"></script>
Ramda 中没有内置这样的东西。 (我不太清楚我们将如何键入输入。)但是编写您自己的内容很容易:
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]]]
您可以在 Ramda REPL
上看到实际效果通常更容易将其分解为更小的功能位,在本例中,展平深度嵌套的数组,然后在其上进行映射。
const deepMap = f => R.pipe(flatten, map(f))
deepMap(R.inc)(arr)
// -> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]