![](/img/trans.png)
[英]JavaScript “ is not a function” error when passing function as argument
[英]JavaScript - implementing map function with reduce, error when passing function as argument
我正在尝试使用reduce在javascript中实现地图功能。
function newMap(inputArr, fn) {
return inputArr.reduce((mapItem, elem) =>
mapItem = (fn(elem)), [])
}
function plusTwo(num) {
return num + 2;
}
newMap(arr, plusTwo())
console.log(newMap)
错误输出是:“TypeError: fn is not a function”
所以我的问题是——我做错了什么,reduce 函数签名或传递的函数抛出错误?
PS - 仍在学习 javascript,如果有人可以帮助编辑标题以提高清晰度,那将不胜感激。
谢谢
您在传递它时调用plusTwo
,但您只需要在 reduce 回调中调用plusTwo
。 在 reduce 回调中,将fn(elem)
的调用添加到累加器数组中。
function newMap(inputArr, fn) { return inputArr.reduce((accum, item) => [...accum, fn(item)], []); } function plusTwo(num) { return num + 2; } const arr = [1, 2, 3]; console.log(newMap(arr, plusTwo));
您传递给 reduce 的回调预计会返回一些东西。 加上其他人评论的内容,您想传递plusTwo
,而不是plusTwo()
,后者是NaN
( undefined+2
的结果):
function newMap(inputArr, fn) { return inputArr.reduce((accum, item) => { accum.push(fn(item)); return accum; }, []); } function plusTwo(num) { return num + 2; } const arr = [1, 2, 3]; console.log(newMap(arr, plusTwo)); console.log("plusTwo:", plusTwo); console.log("plusTwo():", plusTwo());
mapItem
是对结果数组的引用。 您需要将结果值推送给它,而不是在每次迭代中重新分配它,即mapItem.push(fn(elem))
plusTwo
作为函数而不是调用它plusTwo()
,这就是为什么你得到fn is not a function
错误newMap
的结果而不是newMap
本身function newMap(inputArr, fn) {
return inputArr.reduce((mapItem, elem) => {
mapItem.push(fn(elem))
return mapItem;
}, [])
}
function plusTwo(num) {
return num + 2;
}
let result = newMap([1,2,3], plusTwo)
console.log(result)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.