javascript - React 通过嵌套对象递归迭代
问题描述
我正在尝试递归迭代嵌套对象以获取键和值。
我的数据结构是:
{
"id": 8743077530231325861,
"name": "Name of XYZ",
"key X": 0,
"key Y": {
"details": {
"value": {
"up": 5,
"down": 3
},
"path": "xyz"
},
"key Z": {
"value": 1,
"path": "abc"
}
},
"createdTimestamp": 1554446703000
}
我的功能是:
recursion = (item, keyString) => {
if(isObject(item)){
Object.keys(item).map((key) => {
return this.recursion(item[key], keyString+`.${key}`)
})
}else{
return {item, keyString}
}
}
我称之为:
Object.keys(data).map(key =>{
console.log(this.recursion(data[key], key))
})
我的问题是作为对象的键总是未定义的。我知道那是因为他们需要再次迭代,并且输出比函数更快。当我打印出递归函数末尾的值而不是返回它们时,它们不是未定义的。
最后,我希望每个键都有所有最深的值和“路径”。例如
8743077530231325861,"id"
Name of XYZ,"name"
0, "keyX"
5, "keyY.details.value.up"
...
我已经尝试使用 await / async 但我无法获取所有值
如果有人对我有提示会很好
解决方案
您需要返回映射的结果。
const
isObject = v => v && typeof v === 'object',
recursion = (item, path = '') => isObject(item)
? Object
.keys(item)
.flatMap(k => recursion(item[k], path + (path && '.') + k))
: { item, path };
var data = { id: 8743077530231326000, name: "Name of XYZ", "key X": 0, "key Y": { details: { value: { up: 5, down: 3 }, path: "xyz" }, "key Z": { value: 1, path: "abc" } }, createdTimestamp: 1554446703000 },
result = recursion(data);
console.log(result);
推荐阅读
- php - 将表单数据插入 SQL 表
- python - 避免被识别为垃圾邮件
- sql - PostgreSQL:我想知道'cast'的区别
- python - 在 tf.layers.conv2d 中,使用 use_bias=True,偏差是绑定的还是解绑的?
- html - 标题中的列表项不是很居中(使用 Flexbox)
- python - 非常相同的数据和非常相似的 catboost 模型之间的特征重要性截然不同
- android - 如何固定 TableLayout 的第一行?
- graph - 如何在乳胶上绘制加权图?
- django - 是否可以使用非默认数据库连接删除应用程序的默认数据库迁移?
- powershell - AD域迁移后使用powershell进行权限映射