【发布时间】:2016-04-01 04:04:51
【问题描述】:
问题是使用reduce()对数组数组进行操作,返回一个没有子数组的齐次数组。 例如 - [1,2,[3,[4,5]]] 将返回 [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],返回的对象是 [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));
这给了我错误
Uncaught TypeError: [object Array] is not a function(anonymous function) @ Flattening.html:27
它将我的函数 oneArray 解释为数组而不是函数
我理解问题来自这样一个事实,即 reduce 可以(我认为)只能与定义为参数的函数一起使用。 有没有人有一个解决方案,让我得到 [1,2,3,4,5,6,78,9,10] 作为我的结果,解决 reduce() 的限制,除非我错过了什么?
【问题讨论】:
-
我只看了标题,但在标题中你问错了问题。你有情况A,你想达到情况B。解释你想要什么;不是你认为你想要的。如果你知道怎么做,你就不用问了。
-
若要提供
function作为参数,请仅通过名称传递它——arr.reduce(onArray, x)。在名称后包含括号首先调用函数并将其return值提供给arr.reduce()。 -
为什么要复制?这里需要递归,在另一个问题中只是 2 级数组。
标签: javascript arrays reduce