如何将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
相关产品推荐
相关产品推荐

