如何将含JSON字符串数组的对象转换为键值匹配的对象数组?
问题解决:将多语言字符串数组转换为配对对象数组
输入对象
{ "en": "[\"En1\",\"En2\"]", "de": "[\"De1\",\"De2\"]" }
期望输出
[ { "en": "En1", "de": "De1" }, { "en": "En2", "de": "De2" } ]
你的当前代码仅完成了将每个语言的JSON字符串解析为数组,但没有将对应位置的元素配对组合成目标对象。以下是两种解决方案:
方案一:动态适配任意语言键(通用型)
如果你的对象可能包含更多语言键,这种写法更灵活:
const obj = { en: '["En1","En2"]', de: '["De1","De2"]', }; // 1. 解析所有语言的JSON字符串为数组,并保留键名 const languageData = Object.entries(obj).map(([lang, str]) => ({ lang, values: JSON.parse(str) })); // 2. 获取数组长度(默认取第一个语言的数组长度,需确保所有语言数组长度一致) const itemCount = languageData[0].values.length; // 3. 按索引遍历,生成每个配对对象 const result = Array.from({ length: itemCount }, (_, idx) => { return languageData.reduce((acc, { lang, values }) => { acc[lang] = values[idx]; return acc; }, {}); }); console.log(result);
方案二:针对已知语言键(简洁型)
如果语言键固定为en和de,可以直接解析后按索引配对:
const obj = { en: '["En1","En2"]', de: '["De1","De2"]', }; // 解析两个语言的数组 const enList = JSON.parse(obj.en); const deList = JSON.parse(obj.de); // 遍历数组,生成配对对象 const result = enList.map((enVal, index) => ({ en: enVal, de: deList[index] })); console.log(result);
两种方案都能输出你需要的结构,可根据实际场景选择。
内容的提问来源于stack exchange,提问作者Blai
相关产品推荐
相关产品推荐

