如何使用Object.keys格式化多语言键值对数据?
问题:转换多语言数据结构
原始数据
const langs = { en: ['One', 'description'], pl: ['Jeden', 'opis'], };
期望转换后的格式
const formattedData = { name: { en: "One", pl: "Jeden", }, description: { en: "description", pl: "opis", } };
我尝试的代码(未得到预期结果)
const langs = { en: ['One', 'description'], pl: ['Jeden', 'opis'], }; const val = Object.keys(langs).map(item => ({ [item]: langs[item][0] })) console.log(val);
解决方案
你当前用map生成的是一个包含单个键值对对象的数组,和目标的嵌套对象结构不符。这里提供两种实现方式:
方式一:固定字段直接赋值
如果字段数量固定(比如name对应数组第0项,description对应第1项),可以直接遍历语言键来填充数据:
const langs = { en: ['One', 'description'], pl: ['Jeden', 'opis'], }; const formattedData = { name: {}, description: {} }; // 遍历每种语言,给对应字段赋值 for (const lang of Object.keys(langs)) { formattedData.name[lang] = langs[lang][0]; formattedData.description[lang] = langs[lang][1]; } console.log(formattedData);
方式二:动态适配字段数量
如果以后可能新增更多字段,可以先定义字段名称数组,再动态构建对象:
const langs = { en: ['One', 'description'], pl: ['Jeden', 'opis'], }; // 字段顺序要和原始数组中的元素顺序一一对应 const fieldNames = ['name', 'description']; const formattedData = {}; // 先初始化每个字段的空对象 fieldNames.forEach(field => { formattedData[field] = {}; }); // 遍历语言,填充每个字段的多语言值 for (const lang of Object.keys(langs)) { fieldNames.forEach((field, index) => { formattedData[field][lang] = langs[lang][index]; }); } console.log(formattedData);
内容的提问来源于stack exchange,提问作者jsobjectkeys2
相关产品推荐
相关产品推荐

