Javascript 在这个递归中,我应该使用深层扁平化代码修改什么?
我试图通过reduce和concat启用深层扁平化使用递归。 但是当我编译它的时候,出现了像bellow这样的类型错误 TypeError:arr.reduce不是一个函数 我想这个问题与我所收到的论点类型有关 你能给我一个提示吗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
函数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方法感到困惑。现在我明白了。谢谢