javascript - 如何在javascript中动态重命名嵌套对象数组中的对象键
问题描述
我需要在对象 JavaScript 的嵌套数组中动态重命名对象键名,我曾尝试使用此代码。这也是我仅从 Stack Overflow 获得的,但这不起作用,这意味着它只检查第一级而不进行深度替换。
const node = {
'id': 'de603a3e',
'name': 'erewr',
'subGroups': [
{
'id': '83d7c7e4',
'name': 'dfds',
'subGroups': [ ]
},
{
'id': '050cde96',
'name': 'tetwet',
'subGroups': [ ]
},
{
'id': 'd67cc4e8',
'name': 'wewqe',
'subGroups': [
{
'id': '553c301d',
'name': 'ewqe',
'subGroups': [
]
}
]
},
{
'id': '5d5ae5f2',
'name': 'rwq',
'subGroups': [
{
'id': 'ff29ad54',
'name': 'wqe',
'subGroups': [
]
},
{
'id': '5d013943',
'name': 'weqe',
'subGroups': [
]
}
]
}
]
}
console.log(renameKey(node, { subGroups: 'subordinates' }))
renameKey(obj, keysMap) {
return transform(obj, function(result, value, key) {
const currentKey = keysMap[key] || key;
result[currentKey] = isObject(value) ? this.renameKey(value, keysMap) : value;
});
}
我在 TypeScript 中使用此代码。
注意:transform
并且isObject
是 lodash
我收到错误ERROR TypeError: Cannot read property 'replaceKeysDeep' of undefined
解决方案
这应该工作
function renameKeys(node, keysMaps) {
if(!isObject(node)) return node
if(Array.isArray(node)) return node.map(item => renameKeys(item, keysMaps))
return Object.entries(node).reduce((result, [key, value]) => {
const newKey = keysMaps[key] || key;
return {
...result,
[newKey]: renameKeys(value, keysMaps)
};
}, {});
}
推荐阅读
- c# - 如何使用 .net 中的充气城堡使用 RSA/ECB/OAEPWithSHA256AndMGF1Padding 进行加密?
- android - 使用嵌套导航进行深度链接(react-native)
- python - 在张量流中读取张量的值
- amazon-web-services - Aws cognito sms 在日志中发送成功但用户未收到?
- r - 使用正则表达式查找并提取一段字符串
- scala - 线程“主”java.lang.NoClassDefFoundError 中的异常:org/apache/kafka/common/errors/TimeoutException
- python - 如何迭代地向 Pandas Dataframe 中的多行添加随机值?
- java - mkdirs() 已成功执行,但该文件夹在 Honor 9i 中不可见
- php - 如何获取文件内容作为文本区域值?
- vscode-remote - 当我通过 SSH 连接时,我可以停止 VSCode 远程服务器重新安装吗?