You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:25:32