回调返回语句有问题

Having trouble with callback return statements

提问人:Matthew Gregerson 提问时间:2/4/2023 最后编辑:BarmarMatthew Gregerson 更新时间:2/4/2023 访问量:54

问:

跳过回调返回时遇到一些麻烦。问题来了:

编写一个接受数组的函数 ,以及一个回调函数 cb。应在数组上调用回调函数,然后返回的值应为数组,而不管回调返回什么。tapitems

我的尝试:

function tap(items, cb){
  let result = items.map(cb)
  return result;
}

样品:

console.log(tap([1, 2, 3], function (items) {
  items.pop();
})).reverse();  // [2,1]

console.log(tap(["a", "b", "c"], function (items) {
  return items[0];
}));  // ["a","b","c"]

当我输入这段代码时,我希望它将回调函数映射到 items 数组。

对于每个测试用例,我都收到了以下内容:

a. TypeError: items.pop is not a function
b. [ 'a', 'b', 'c' ]
JavaScript 数组函数 回调

评论

3赞 Barmar 2/4/2023
回调的参数是数组的每个元素,而不是整个数组。
1赞 Pointy 2/4/2023
此外,您的回调必须有语句。.map()return
0赞 Robin Zigmond 2/4/2023
您的说明有点模棱两可,但我认为这意味着回调应该接受整个数组作为参数,而不是像您那样接受每个单独的项目。
2赞 T.J. Crowder 2/4/2023
这与你的.问题在于,你传入一个数字数组,然后调用它并作为映射函数传入,然后使用 on 接收的内容——但这是一个数字,而不是一个数组。returnmapcbitem.pop()cbitem
0赞 Robin Zigmond 2/4/2023
事实上,假设您给出的“样本”是作为测试用例提供的,它们证实了我的读数 - 应该在整个数组上调用回调。

答:

1赞 Barmar 2/4/2023 #1

这些说明没有说明如何映射函数,您只需要在整个数组上调用它。

由于您应该返回原始数组,因此无需将回调结果分配给变量。只需返回.items

您还需要调用 返回的结果。您根据 的结果调用它,但它不返回任何内容。reverse()tap()console.log()

function tap(items, cb){
  cb(items);
  return items;
}

console.log(tap([1, 2, 3], function (items) {
  items.pop();
}).reverse());  // [2,1]

console.log(tap(["a", "b", "c"], function (items) {
  return items[0];
}));  // ["a","b","c"]