gpt4 book ai didi

javascript - 如果我不使用 “` 的初始值,为什么会得到 `flattenDeep(...)` TypeError`: `reduce` is not iterable”,?

转载 作者:行者123 更新时间:2023-11-29 18:50:16 24 4
gpt4 key购买 nike

当我编写下面的函数时,它会抛出以下错误:

const flattenDeep = (arr) => Array.isArray(arr)
? arr.reduce( (a, b) => [...flattenDeep(a), ...flattenDeep(b)])
: [arr]

const a=flattenDeep([1, [[2], [3, [4]], 5],[[[[[[[1]]]]]]]])
console.log(a);

error message

当我改变它时,它就起作用了。为什么加初始值[]后可以运行?

const flattenDeep = (arr) => Array.isArray(arr)
? arr.reduce( (a, b) => [...flattenDeep(a), ...flattenDeep(b)], [])
: [arr]

const a=flattenDeep([1, [[2], [3, [4]], 5],[[[[[[[1]]]]]]]])
console.log(a)

这工作正常,并打印 [1, 2, 3, 4, 5, 1]

最佳答案

你得到这个错误的原因是因为,在开始时,flattenDeep(b) 将被调用 b === [[2], [3, [4]] , 5]。反过来,这将使用 a === [2] 调用 flattenDeep(a)

Array.isArray([2])true,因此 [2].reduce((a, b) =>... ) 没有初始值将被调用。 reduce 考虑初始值(如果有的话),然后是所有其他数组元素,作为ab,其中 a 累积返回值,b下一个值

在具有单个值(加上开头的初始值)的数组上调用 reduce 的结果是那个单个值。换句话说,函数体 [...flattenDeep(a), ...flattenDeep(b)] 根本没有执行,也没有创建数组。立即返回数组的第一个元素 2

所以 flattenDeep([2])2,它是不可迭代的。

添加初始值 [] 会导致 reduce 总是 返回一个数组,即使它只是那个空数组。当然,数组始终是可迭代的。

关于javascript - 如果我不使用 “` 的初始值,为什么会得到 `flattenDeep(...)` TypeError`: `reduce` is not iterable”,?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488542/

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