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);
代码说明:
Object.entries(originalData):将原对象转换为[分类名, 项目数组]的二维数组,例如["Category1", ["Item_A", "Item_B", "Item_C"]]reduce():初始化空对象作为结果容器,遍历每个分类键值对进行累加处理forEach():遍历当前分类下的所有项目,为结果对象添加项目名: [分类名]的键值对- 最终返回的累加对象即为目标结构
如果想要更贴合纯函数式编程(避免副作用),也可以用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
相关产品推荐
相关产品推荐

