如何在 javascript 中递归使用 reduce() 方法?
How do I recursively use the reduce() method in javascript?
问题是使用 reduce() 对数组数组进行操作,return 没有子数组的同构数组。
例如 - [1,2,[3,[4,5]]] 将 return [1,2,3,4,5].
这是有效的代码,考虑到子数组本身不是另一个数组数组-
var a = [3,[4,[5,[6,7]]]];
var b = 8;
var c = [9,10];
var x = []
var arr = [1,2,a,b,c];
arr = [1,2,3,4,c];
console.log(arr.reduce(function oneArray(a,b)
{
return a.concat(b);
},x))
请注意,我更改了我的 arr 数组,因为代码不适用于第一个 arr 数组,即 [1,2,a,b,c]。
对于 arr [1,2,3,4,c],对象 returned 是 [1,2,3,4,9,10]
这是我尝试使其适用于第一个 arr-
function oneArray(a,b)
{
if (typeof b == "object")
b = b.reduce(oneArray(x,y),[]);
return a.concat(b);
}
console.log(arr.reduce(oneArray(a,b),x));
这给了我错误
未捕获类型错误:[对象数组] 不是函数(匿名函数)@Flattening.html:27
它将我的函数 oneArray 解释为数组而不是函数
我理解这个问题是因为 reduce 可以(我认为)只能与定义为参数的函数一起工作。
有没有人有解决方案,以便我得到 [1,2,3,4,5,6,78,9,10] 作为解决 reduce() 限制的结果,除非我错过了什么?
通过数组测试和 reduce 函数的递归调用来减少。
编辑:感谢 Jonathan Lonowski 的提示。
function flat(r, a) {
if (Array.isArray(a)) {
return a.reduce(flat, r);
}
r.push(a);
return r;
}
var array = [3, [4, [5, [6, 7]]]];
document.write('<pre>' + JSON.stringify(array.reduce(flat, []), 0, 4) + '</pre>');
问题是使用 reduce() 对数组数组进行操作,return 没有子数组的同构数组。 例如 - [1,2,[3,[4,5]]] 将 return [1,2,3,4,5].
这是有效的代码,考虑到子数组本身不是另一个数组数组-
var a = [3,[4,[5,[6,7]]]];
var b = 8;
var c = [9,10];
var x = []
var arr = [1,2,a,b,c];
arr = [1,2,3,4,c];
console.log(arr.reduce(function oneArray(a,b)
{
return a.concat(b);
},x))
请注意,我更改了我的 arr 数组,因为代码不适用于第一个 arr 数组,即 [1,2,a,b,c]。 对于 arr [1,2,3,4,c],对象 returned 是 [1,2,3,4,9,10]
这是我尝试使其适用于第一个 arr-
function oneArray(a,b)
{
if (typeof b == "object")
b = b.reduce(oneArray(x,y),[]);
return a.concat(b);
}
console.log(arr.reduce(oneArray(a,b),x));
这给了我错误
未捕获类型错误:[对象数组] 不是函数(匿名函数)@Flattening.html:27
它将我的函数 oneArray 解释为数组而不是函数
我理解这个问题是因为 reduce 可以(我认为)只能与定义为参数的函数一起工作。 有没有人有解决方案,以便我得到 [1,2,3,4,5,6,78,9,10] 作为解决 reduce() 限制的结果,除非我错过了什么?
通过数组测试和 reduce 函数的递归调用来减少。
编辑:感谢 Jonathan Lonowski 的提示。
function flat(r, a) {
if (Array.isArray(a)) {
return a.reduce(flat, r);
}
r.push(a);
return r;
}
var array = [3, [4, [5, [6, 7]]]];
document.write('<pre>' + JSON.stringify(array.reduce(flat, []), 0, 4) + '</pre>');