javascript - 有没有办法获取对象(包括子对象)内的所有键?
问题描述
目前,我正在尝试获取对象的所有键,包括子对象。
我知道
Object.keys(obj)
返回对象的键,但不返回其中对象的键。
因此,例如,我得到了以下对象:
let exampleObject =
{
a: "value",
b: "value",
c: 404,
d: {
e: "value",
f: "value"
}
}
注意: d键可能会更改其名称,因此无法使用Object.keys(obj.d) 之类的东西。
如何在对象内存在的键的总列表中获取e和f ?
解决方案
您可以使用flatMap
递归获取这样的密钥:
let exampleObject={a:"value",b:"value",c:404,d:{e:"value",f:"value"}};
const getKeys = obj => Object.keys(obj).flatMap(k => Object(obj[k]) === obj[k]
? [k, ...getKeys(obj[k])]
: k)
console.log(getKeys(exampleObject))
如果flatMap
不支持,请reduce
像这样使用:
function getKeys(obj) {
return Object.keys(obj).reduce((r, k) => {
r.push(k);
if(Object(obj[k]) === obj[k])
r.push(...getKeys(obj[k]));
return r;
}, [])
}
检查该Object(obj[k]) === obj[k]
属性是否是一个对象,而它不是null
。因为,typeof null === "object"
推荐阅读
- python - 多处理不会创建任何额外的进程
- ios - 从 iOS 应用上传 OneDrive Business 上的文件失败
- javascript - 在生产代码中记录缩小的 JavaScript 错误
- php - 它是什么代码以及如何在php中重写
- javascript - 在momentjs中将日期从给定格式转换为yyyy-mm-dd
- cqrs - 如果事件存储中存在某些事件,则首次应用启动失败
- excel - excel边框外底部的一行,如何解决?
- regex - Bash / 正则表达式转换
- html - HTML/CSS - 两个具有单一渐变背景但有一个粘性元素的 div
- formal-verification - 为什么我不能从 Dafny 的幽灵场中调用(非静态)引理?