JavaScript TypeError:callback不是函数及mapById函数修复方案
修复
TypeError: callback is not a function 并实现 mapById 函数 先解决报错问题
你遇到的TypeError: callback is not a function是因为调用mapById(input)时只传了第一个参数list,但函数定义里要求第二个参数callback——此时callback是undefined,把它当函数调用自然会触发报错。
结合你的需求(用对象的id作为键映射对应对象),其实完全不需要这个callback参数,我们可以直接修改函数逻辑来匹配需求。
修正函数实现
你的原始代码还有个逻辑偏差:它把每个键对应的值存成了数组,但需求是直接把对象本身作为值。我们可以调整成如下符合需求的实现:
function mapById(list) { const result = {}; list.forEach(item => { // 直接用item的id作为键,赋值对应的对象 result[item.id] = item; }); return result; } // 测试示例 const input = [{id: 102, name: "Alice"}, {id: 205, name: "Bob", title: "Dr."}, {id: 592, name: "Claire", age: 32}]; console.log(mapById(input));
额外优化(可选)
如果想让函数更灵活,比如允许自定义键的获取逻辑(保留callback参数但给它默认值),可以改成这样:
function mapById(list, callback = item => item.id) { const result = {}; list.forEach(item => { const key = callback(item); result[key] = item; }); return result; } // 按默认id映射(满足你的核心需求) console.log(mapById(input)); // 自定义键,比如用name作为键 console.log(mapById(input, item => item.name));
这样既解决了报错,又完全满足了你的核心需求,还保留了扩展性。
内容的提问来源于stack exchange,提问作者cocomatt
相关产品推荐
相关产品推荐

