JavaScript tap函数回调处理问题求助:调用回调后返回原数组
问题分析
- 你写的
tap函数误用了map方法:map会遍历数组的每个元素,把单个元素作为参数传给回调cb,但你的测试用例里,回调期望接收的是整个数组,这就导致第一个测试用例中,cb拿到的是单个数字(比如1),数字没有pop()方法,所以抛出TypeError。 - 另外,你的函数返回了
map的处理结果,但需求明确要求无论cb返回什么,最终必须返回原数组items。
修正后的代码
function tap(items, cb){ // 直接把整个原数组传给回调执行 cb(items); // 不管回调返回值是什么,都返回原数组 return items; }
测试验证
跑你的测试用例就能得到预期结果:
- 第一个测试用例:
console.log(tap([1, 2, 3], function (items) { items.pop(); // 此时items是原数组[1,2,3],执行pop后数组变为[1,2] })).reverse(); // tap返回修改后的原数组[1,2],reverse后得到[2,1],符合预期
- 第二个测试用例:
console.log(tap(["a", "b", "c"], function (items) { return items[0]; // 回调返回"a",但tap函数忽略该返回值,直接返回原数组["a","b","c"],符合预期 }));
内容的提问来源于stack exchange,提问作者Matthew Gregerson
相关产品推荐
相关产品推荐

