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

向内联函数数组传递参数:multiMap函数实现问题排查

问题分析与解决方案

你的核心问题在于没有遍历回调函数数组中的所有函数,只执行了单个回调(甚至调用方式错误),导致每个键对应的结果数组只有一个元素。

错误原因拆解

  1. 你最初用的arrCallbacks.apply(null, arrVals[i])完全误用了apply方法:apply是用来给单个函数传递参数数组的,而arrCallbacks是函数数组,这行代码根本无法正确执行。
  2. 后来尝试的[arrCallbacks[i](arrVals[i])],只是取了回调数组中第i个函数的结果,没有遍历所有回调,自然无法生成完整的结果数组。

修正后的代码(简洁版)

function multiMap(arrVals, arrCallbacks) {
  const resultObj = {};
  // 遍历每个值
  arrVals.forEach(val => {
    // 用map遍历所有回调,收集每个回调的执行结果
    resultObj[val] = arrCallbacks.map(callback => callback(val));
  });
  return resultObj;
}

console.log(multiMap(['catfood', 'glue', 'beer'], [
  function(str) { return str.toUpperCase(); },
  function(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); },
  function(str) { return str + str; }
]));

更直观的循环版(适合理解底层逻辑)

如果你不习惯用数组方法,也可以用嵌套循环实现:

function multiMap(arrVals, arrCallbacks) {
  const resultObj = {};
  // 外层循环遍历值数组
  for (let i = 0; i < arrVals.length; i++) {
    const currentVal = arrVals[i];
    const callbackResults = [];
    // 内层循环遍历所有回调函数
    for (let j = 0; j < arrCallbacks.length; j++) {
      callbackResults.push(arrCallbacks[j](currentVal));
    }
    resultObj[currentVal] = callbackResults;
  }
  return resultObj;
}

执行逻辑说明

  1. 遍历值数组中的每个元素,作为结果对象的键。
  2. 对每个值,遍历回调函数数组,用当前值作为参数调用每个回调,把所有结果收集成数组。
  3. 将这个结果数组赋值给对应键,最终返回完整的对象。

内容的提问来源于stack exchange,提问作者LucasAE

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:06:26