JavaScript 如何提取嵌套对象公共属性作为键生成目标数组
多语言字段结构的转换实现方案
核心逻辑
基于你提供的原始对象结构,要完成到目标data数组的格式化转换,最优实现采用字段维度单次遍历整合的思路,既保证转换效率最高,也能兼容后续多语言扩展的需求,整体无需引入第三方依赖。
可直接复用的实现代码
// 原始输入对象 const source = { field: { zh: { game_code : "游戏", transfer_amount : "金额", uni_id : "流水号", create_time : "建立时间" }, en: { game_code : "GameCode", transfer_amount : "Amount", uni_id : "UniqId.", create_time : "CreateTime" } } } // 结构转换函数 const transformToData = (sourceObj) => { const { field } = sourceObj; // 提取所有支持的语言维度,如 ['zh', 'en'] const supportedLangs = Object.keys(field); // 以第一个语言分支的字段列表为遍历基准(约定不同语言分支的字段完全对齐) const baseLangFields = Object.keys(field[supportedLangs[0]]); // 逐字段生成数组元素 const data = baseLangFields.map(fieldKey => { // 为当前字段整合所有语言的对应翻译值 const langValueMap = supportedLangs.reduce((map, lang) => { map[lang] = field[lang][fieldKey]; return map; }, {}); // 返回单字段结构的数组项 return { [fieldKey]: langValueMap }; }); return data; } // 调用得到完全匹配目标结构的data数组 const data = transformToData(source);
方案优势
- 性能最优:整体遍历次数与字段总数、语言总数线性相关,是这类双向结构转换的理论最低时间复杂度,无冗余的对象查找或循环操作
- 低耦合易扩展:后续新增日语、韩语等其他语言时,仅需在原
field对象下补充对应语言的字段映射块,转换逻辑无需修改 - 容错能力强:可直接在语言值整合环节增加兜底逻辑,比如给缺失的翻译值加默认空串,适配不同语言分支字段不完全对齐的场景
- 输出完全匹配要求:生成的
data数组每一项都是独立的单字段对象,字段值直接挂载对应语言的翻译结果,和示例目标结构完全一致
内容的提问来源于stack exchange,提问作者Wu Hazel
相关产品推荐
相关产品推荐

