You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:36:27