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

JavaScript:使用函数链式调用重构多维JavaScript对象

解决方案

可以通过**Object.entries()提取原对象的分类键和对应项目数组,再结合reduce()和forEach()**完成结构转换,完全符合函数式编程风格:

const originalData = {
  Category1: ["Item_A", "Item_B", "Item_C"],
  Category2: ["Item_D", "Item_E", "Item_F"],
  Category3: ["Item_G", "Item_H"]
};

const transformedData = Object.entries(originalData).reduce((result, [category, items]) => {
  items.forEach(item => {
    result[item] = [category];
  });
  return result;
}, {});

console.log(transformedData);

代码说明:

  1. Object.entries(originalData):将原对象转换为[分类名, 项目数组]的二维数组,例如["Category1", ["Item_A", "Item_B", "Item_C"]]
  2. reduce():初始化空对象作为结果容器,遍历每个分类键值对进行累加处理
  3. forEach():遍历当前分类下的所有项目,为结果对象添加项目名: [分类名]的键值对
  4. 最终返回的累加对象即为目标结构

如果想要更贴合纯函数式编程(避免副作用),也可以用flatMap先展开所有项目-分类对应关系,再通过reduce聚合:

const transformedData = Object.entries(originalData)
  .flatMap(([category, items]) => items.map(item => [item, category]))
  .reduce((result, [item, category]) => ({
    ...result,
    [item]: [category]
  }), {});

这个版本全程使用纯函数操作,无外部变量修改的副作用,更符合函数式编程的严格定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:51:11