gpt4 book ai didi

javascript - Array.reduce 和递归

转载 作者:行者123 更新时间:2023-11-29 10:55:52 25 4
gpt4 key购买 nike

我试图在 Array.reduce 调用中嵌套一个递归函数。

但以下仅对第三种情况无效

const i1 = {'local': [['a','b']]};
const i2 = {'local': [['c','d']], 'recursive': []};
const i3 = {'local': [['c','d']], 'recursive': [{'local': [['e','f']]}]};

function reduce(current, result = []) {

if(current.hasOwnProperty('local'))
result.push(...current.local);

if(current.hasOwnProperty('recursive'))
result = current.recursive.reduce(reduce, result);
//'result =' should be optional, but yields a wrong answer anyway

return result;
}

console.log(reduce(i1));
console.log(reduce(i2));
console.log(reduce(i3));

所以我没有调用 reduce,而是尝试了以下循环

for(var i = 0; i < current.recursive.length; ++i)
result = reduce(current.recursive[i], result);
//'result = ' is optional for it is passed by reference

并且有效。作为 JavaScript 的新手,我肯定错过了这里的一个关键特性,所以你能解释一下吗?

第三个实例的输出应该是

[ [ 'c', 'd' ], [ 'e', 'f' ] ]

但是是

{ local: [ [ 'e', 'f' ] ] }

[ [ 'c', 'd' ] ]

result = 被移除时。

最佳答案

问题是参数的顺序,reduce 回调函数的第一个参数是累加器而不是当前值。试试这个:

const i1 = {'local': [['a','b']]};
const i2 = {'local': [['c','d']], 'recursive': []};
const i3 = {'local': [['c','d']], 'recursive': [{'local': [['e','f']]}]};

function reduce(result, current) {

if(current.hasOwnProperty('local'))
result.push(...current.local);

if(current.hasOwnProperty('recursive'))
result = current.recursive.reduce(reduce, result);
//'result =' should be optional, but yields a wrong answer anyway

return result;
}

console.log(reduce([], i1));
console.log(reduce([], i2));
console.log(reduce([], i3));

关于javascript - Array.reduce 和递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57513618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com