最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何用 Object.entries 与 reduce 将对象快速重组为另一种数据结构的业务 Map
时间:2026-07-27 09:50:53 编辑:袖梨 来源:一聚教程网
Object.entries 配合 reduce 是构建业务 Map 最直接可控的方式,支持解构、条件判断与嵌套处理,适用于表单校验、API 请求体、类型分组及嵌套扁平化等场景。
Object.entries 配合 reduce 是将对象结构化转换为业务 Map(即键值映射结构,不特指 JavaScript 的 Map 类型,而是泛指“字段名 → 处理后值”的映射关系)最直接、可控的方式之一。它天然支持解构、条件判断与嵌套处理,适合构建表单校验规则、API 请求体、状态映射表等场景。
用 Object.entries + reduce 构建字段规则 Map
比如后端接口要求每个字段携带 value 和校验状态 valid,原始对象是:
目标结构是:
{ username: { value: 'admin', valid: true }, email: { value: '', valid: false }, age: { value: 25, valid: true } }实现方式:
- 用
Object.entries()拆出[key, value]对 - 在
reduce()回调中逐个判断并组装新结构 - 必须传入初始值
{},否则空对象或单属性对象会出错
acc[k] = {
value: v,
valid: v !== null && v !== undefined && (typeof v !== 'string' || v.trim() !== '')
};
return acc;
}, {});
按类型分组生成分类 Map
当需要把对象字段按数据类型归类(如字符串字段、数字字段、布尔字段),可借助 reduce 累积到不同子对象中:
const config = { host: 'api.example.com', port: 8080, enabled: true, timeout: 5000 };const typeMap = Object.entries(config).reduce((acc, [k, v]) => {
const type = typeof v;
if (!acc[type]) acc[type] = {};
acc[type][k] = v;
return acc;
}, {});
// → { string: { host: '...' }, number: { port: 8080, timeout: 5000 }, boolean: { enabled: true } }
嵌套对象转扁平路径 Map(带 key 路径)
对配置对象做路径化映射(如 "database.host" → "127.0.0.1"),可用递归 reduce 实现:
- 非对象值直接写入
acc[fullPath] = value - 对象值则递归调用,拼接
${parentKey}.${childKey} - 注意排除
null(因typeof null === 'object')
return Object.entries(obj).reduce((acc, [k, v]) => {
const key = prefix ? `${prefix}.${k}` : k;
if (v !== null && typeof v === 'object' && !Array.isArray(v)) {
Object.assign(acc, flattenToMap(v, key));
} else {
acc[key] = v;
}
return acc;
}, {});
}
配合 Object.fromEntries 简化逻辑(可选替代)
如果只是做一层映射(无深层累积逻辑),Object.fromEntries() + map() 更简洁:
Object.entries(formData).map(([k, v]) => [
k.toUpperCase(),
{ input: v, required: ['USERNAME', 'EMAIL'].includes(k.toUpperCase()) }
])
);
但涉及累加、条件合并、多层依赖时,reduce 仍是更稳妥的选择。
相关文章
- 晴空双子500关通关阵容推荐 晴空双子传说级T0阵容搭配与实战解析 07-30
- 辉光之城1907好玩吗 辉光之城1907核心玩法与新手入门指南 07-30
- 未定事件簿主线第十八章行至黎明(上)即将开放 07-30
- 晴空双子爬塔阵容搭配指南 晴空双子高效率通关塔层阵容推荐 07-30
- 生存33天本周礼包码(1月12日) 07-30
- 原神月之四版本全新圣遗物介绍 07-30