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

JS新手求助:对象数组转指定Key映射对象的函数异常问题

解决对象数组转指定键为属性名对象的函数问题

我来帮你排查下问题所在,你的代码里有几个小细节错误导致封装成函数后无法正常工作,咱们一步步拆解:

问题点分析

  • 参数引用错误:你定义的函数是function f(k, v),调用时传的是f(arr, 'role'),但在reduce里写的是current.v——这会去取每个对象里名为v的属性,而不是你传入的参数v对应的属性,正确写法应该是current[v]。
  • 未返回处理结果:你的函数里执行了reduce逻辑,但没有把reduce的最终结果return出来,所以调用f(arr, 'role')后根本拿不到转换后的对象。
  • 无效的日志代码:你把console.log(prev)写在了return prev之后,这行代码永远不会被执行,要放在return之前才能打印中间结果。

修正后的完整代码

我给你调整了函数名和参数名让语义更清晰,还加了简单的参数校验避免异常:

function convertArrayToObject(arr, targetKey) {
  // 简单参数校验,防止传入无效值
  if (!Array.isArray(arr) || typeof targetKey !== 'string') {
    return {};
  }

  return arr.reduce((resultObj, currentItem) => {
    // 用传入的目标键获取当前对象的属性值,作为新对象的键名
    const keyValue = currentItem[targetKey];
    resultObj[keyValue] = currentItem;
    
    console.log(resultObj); // 现在能正常打印每次迭代的中间结果了
    return resultObj;
  }, {});
}

// 测试你的示例数组
const arr = [{ id: 1, name: 'John', role: 'Developer'}, { id: 2, name: 'Jane', role: 'Lead'}, { id: 3, name: 'Robbie', role: 'QA'}];
const convertedResult = convertArrayToObject(arr, 'role');
console.log(convertedResult);

验证初始需求

用你最开始的输入示例测试,完全符合预期输出:

const testArr = [{id: 1, value: 'abc'}, {id: 2, value: 'xyz'}];
const testResult = convertArrayToObject(testArr, 'id');
console.log(testResult);
// 输出:{ '1': {id: 1, value: 'abc'}, '2': {id: 2, value: 'xyz'} }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:43:12