Why do I get TypeError: 0 is not a function when passing Array.from as a callback to Array.flatMap?
Why do I get TypeError: 0 is not a function when passing Array.from as a callback to Array.flatMap?
将 Array.from 作为回调传递给 Array.flatMap 会导致错误:“TypeError:0 不是函数”
const x = ["12"].flatMap(Array.from)
console.log(x)
尽管这个 Array.from 可以正常用作函数:
const f = Array.from
console.log(f("12"))
我找到了解决这个问题的方法:
const x = ["12"].flatMap(e => Array.from(e))
console.log(x)
我希望有人告诉我:
- 为什么会出现错误?
- 为什么我会收到如此无用的错误消息?
发生这种情况是因为 flatMap 将超过 1 个参数传递给回调。第二个参数是元素的索引。 Array.from 函数需要第二个参数中的替换函数。所以这个缩短的版本通过索引代替函数。
你所做的相当于调用:
Array.from("12", 0)
而不是像这样的合适的替代品:
console.log(Array.from("12", x => x + x));
Array.from
accepts up to 3 parameters, the second one being map function while .flatMap
将迭代索引作为第二个参数传递给它。
因此,在第一次迭代中,Array.from
将接收 0
作为第二个参数,这确实不是 Array.from
期望的函数。
为了更清楚地展示它,这里有一个片段。这一行:
["12"].flatMap(Array.from);
在功能上等同于:
Array.from("12", 0, ["12"]);
这是 Array.from
的错误签名。
将 Array.from 作为回调传递给 Array.flatMap 会导致错误:“TypeError:0 不是函数”
const x = ["12"].flatMap(Array.from)
console.log(x)
尽管这个 Array.from 可以正常用作函数:
const f = Array.from
console.log(f("12"))
我找到了解决这个问题的方法:
const x = ["12"].flatMap(e => Array.from(e))
console.log(x)
我希望有人告诉我:
- 为什么会出现错误?
- 为什么我会收到如此无用的错误消息?
发生这种情况是因为 flatMap 将超过 1 个参数传递给回调。第二个参数是元素的索引。 Array.from 函数需要第二个参数中的替换函数。所以这个缩短的版本通过索引代替函数。
你所做的相当于调用:
Array.from("12", 0)
而不是像这样的合适的替代品:
console.log(Array.from("12", x => x + x));
Array.from
accepts up to 3 parameters, the second one being map function while .flatMap
将迭代索引作为第二个参数传递给它。
因此,在第一次迭代中,Array.from
将接收 0
作为第二个参数,这确实不是 Array.from
期望的函数。
为了更清楚地展示它,这里有一个片段。这一行:
["12"].flatMap(Array.from);
在功能上等同于:
Array.from("12", 0, ["12"]);
这是 Array.from
的错误签名。