【问题标题】:How to expand single level nested hashes on the fly?如何动态扩展单级嵌套哈希?
【发布时间】:2021-04-10 18:02:12
【问题描述】:
我有一个对象,其中一些键是嵌套的单级哈希。在这个例子中,只有b 是嵌套的。
const j = {
a: 'A',
b: {
bb: 'BB',
bbb: 'BBB',
},
c: 'C'
};
问题
我正在寻找的是一种循环对象的方法,如果键是嵌套对象,则改为打印其键。
a
bb
bbb
c
有人知道怎么做吗?
【问题讨论】:
标签:
javascript
node.js
ecmascript-6
javascript-objects
【解决方案1】:
您可以将递归flatMap 与Object.keys 一起使用。
const j = {
a: 'A',
b: {
bb: 'BB',
bbb: 'BBB',
},
c: 'C'
};
const getKeys = o => Object.keys(o).flatMap(x => o[x] === Object(o[x])
? getKeys(o[x]) : x);
console.log(getKeys(j));
【解决方案2】:
您可以使用Object.entries 和flatMap:
const j = { a: 'A', b: { bb: 'BB', bbb: 'BBB' }, c: 'C' };
function getOneLevelKeys(obj) {
return Object.entries(obj)
.flatMap(([key, value]) => typeof value === "object" ? Object.keys(value) : key);
}
console.log( getOneLevelKeys(j) );
【解决方案3】:
您可以递归地执行此操作:
function printKeys(obj) {
for (const [key, val] of Object.entries(obj)) {
if (typeof val === "object") {
printKeys(val);
} else {
console.log(key);
}
}
}
如果你最多只有一层嵌套,@blex 的答案可能会更好。