繁体   English   中英

JavaScript - 使用reduce实现map函数,将函数作为参数传递时出错

[英]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() ,后者是NaNundefined+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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM