Javascript 在这个递归中,我应该使用深层扁平化代码修改什么?

Javascript 在这个递归中,我应该使用深层扁平化代码修改什么?,javascript,Javascript,我试图通过reduce和concat启用深层扁平化使用递归。 但是当我编译它的时候,出现了像bellow这样的类型错误 TypeError:arr.reduce不是一个函数 我想这个问题与我所收到的论点类型有关 你能给我一个提示吗 函数joinArrayOfArrays(arr){ var输出=[]; 平坦深度(arr); 返回arr; } 功能(arr2){ 返回arr2.reduce((acc,val)=>Array.isArray(arr2)?acc.concat(flattedeep(v

我试图通过reduce和concat启用深层扁平化使用递归。 但是当我编译它的时候,出现了像bellow这样的类型错误

TypeError:arr.reduce不是一个函数

我想这个问题与我所收到的论点类型有关

你能给我一个提示吗

函数joinArrayOfArrays(arr){
var输出=[];
平坦深度(arr);
返回arr;
}
功能(arr2){
返回arr2.reduce((acc,val)=>Array.isArray(arr2)?acc.concat(flattedeep(val)):acc.concat(val));
}

要每次检查当前值是否为数组,请使用
val
而不是
arr2
。并将空数组作为
reduce
的起始值

return arr2.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);

您的错误在这里
Array.isArray(arr2)?acc.concat(flattedeep(val)):…
检查
arr2
是否为数组,然后(尝试)展平
val
。您应该检查是否有
isArray(val)

除此之外,
Array#concat()
不是我的选择。因为在这段代码中,它为每次迭代创建一个中间数组。然后复制所有条目,添加新条目并丢弃旧数组;真是浪费。我将创建一个输出数组,并将所有项推入其中

// the recursive part; the reducer
function _flatten(acc, arg) {
  return Array.isArray(arg) ? 
    arg.reduce(_flatten, acc) : 
    (acc.push(arg), acc);
}

function flatten(arg) {
  return _flatten([], arg);
}

此构造
(acc.push(arg),acc)
执行
Array#push()
,并返回数组而不是新长度。

不检查
Array.isArray(arr2)
,检查
Array.isArray(val)
。另外,请提供初始值。另外,请尝试单击
[]
代码段编辑器,然后您可以提供所需的初始值,以返回展平结果。感谢您的帮助。我对使用reduce方法感到困惑。现在我明白了。谢谢