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

如何将JavaScript对象的键作为ID值添加到对象内部?

问题:为对象子项添加对应键名的id属性

我有如下JavaScript对象:

{
    "xx2b": {
        "county": "Baringo",
        "town": "Kabarnet",
        "saccoRegistration": "BO2/08/009",
        "saccoName": "Baringo2"
    },
    "QQDa": {
        "saccoRegistration": "Ba/09/009",
        "town": "Mogotio",
        "county": "Baringo",
        "saccoName": "Baringo1"
    }
}

需要将每个子对象对应的外层键名,设置为该子对象内部的id属性值,预期结果如下:

{
    "xx2b": {
        "id": "xx2b",
        "county": "Baringo",
        "town": "Kabarnet",
        "saccoRegistration": "BO2/08/009",
        "saccoName": "Baringo2"
    },
    "QQDa": {
        "id":"QQDa",
        "saccoRegistration": "Ba/09/009",
        "town": "Mogotio",
        "county": "Baringo",
        "saccoName": "Baringo1"
    }
}

解决方案

方法一:使用Object.entries() + Array.reduce()

这种写法属于函数式风格,代码简洁高效:

const originalObj = {
    "xx2b": {
        "county": "Baringo",
        "town": "Kabarnet",
        "saccoRegistration": "BO2/08/009",
        "saccoName": "Baringo2"
    },
    "QQDa": {
        "saccoRegistration": "Ba/09/009",
        "town": "Mogotio",
        "county": "Baringo",
        "saccoName": "Baringo1"
    }
};

const resultObj = Object.entries(originalObj).reduce((acc, [key, value]) => {
    // 复制原对象的属性并添加id
    acc[key] = { ...value, id: key };
    return acc;
}, {});

console.log(resultObj);

方法二:使用for...in循环

这种写法更直观,适合理解基础遍历逻辑:

const originalObj = {
    "xx2b": {
        "county": "Baringo",
        "town": "Kabarnet",
        "saccoRegistration": "BO2/08/009",
        "saccoName": "Baringo2"
    },
    "QQDa": {
        "saccoRegistration": "Ba/09/009",
        "town": "Mogotio",
        "county": "Baringo",
        "saccoName": "Baringo1"
    }
};

const resultObj = {};
for (const key in originalObj) {
    // 仅遍历对象自身的属性,避免原型链干扰
    if (originalObj.hasOwnProperty(key)) {
        resultObj[key] = { ...originalObj[key], id: key };
    }
}

console.log(resultObj);

说明

两种方法都通过**展开运算符(...)**复制原对象的属性,避免直接修改原对象(如果需要修改原对象,可以直接给originalObj[key].id = key,但通常推荐返回新对象保持原数据不变)。

内容的提问来源于stack exchange,提问作者steve gaikia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:25:50