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 函数签名或正在传递的函数抛出错误,我做错了什么?
P.S。 -- 仍在学习 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 的回调预计会 return 一些东西。加上其他人的评论,你想传递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)
我正在尝试使用 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 函数签名或正在传递的函数抛出错误,我做错了什么?
P.S。 -- 仍在学习 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 的回调预计会 return 一些东西。加上其他人的评论,你想传递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)