好,所以我知道标题有点混乱(也许很多),所以让我解释一下。在像猫鼬模式这样的Object变量中,可以有String,Number,Boolean等类型。但是如果类型是新的Object怎么办?那个对象里面还有另一个对象怎么办?
比方说我在这里得到了这个模式:
user: {
username: 'bob1',
password: '1234',
email: 'someone@example.com',
profile: {
name: {
first: 'Bob',
last: 'Marley'
},
gender: 'male',
country: 'US'
},
userKeys: {
username: { show: true },
password: { show: false },
email: { show: 'maybe' },
profile: {
name: {
first: { show: true },
last: { show: true }
},
gender: { show: false },
country: { show: 'maybe' }
}
}
}
,我想基于该用户的userKeys
在文件中创建一个新的临时对象,该模式仅返回来自模式{true
或'maybe'
的值1}}字段。如何通过不仅迭代基本结构中的键,而且还迭代另一个对象内的对象内的键来做到这一点?我尝试用
userKeys
,但不会记录对象对象的任何内容(例如:profile.name或profile.country)。
我感谢任何提示。
祝你愉快
答案 0 :(得分:0)
您可以创建一个简单的函数,该函数接受一个对象并查看每个键以查看是否存在show: true
或将每个键添加到数组中。然后,对于您查看的每个对象,将其递归地传递回函数中。这是一个非常简洁的解决方案:
let object = {user: {username: 'bob1',password: '1234',email: 'someone@example.com',profile: {name: {first: 'Bob',last: 'Marley'},gender: 'male',country: 'US'},userKeys: {username: { show: true },password: { show: false },email: { show: 'maybe' },profile: {name: {first: { show: true },last: { show: true }},gender: { show: false },country: { show: 'maybe' }}}}}
function getTrueKeys(obj, res = []) {
Object.keys(obj).forEach(k => {
if (obj[k].show && (obj[k].show === true || obj[k].show === 'maybe')) res.push(k)
if (typeof obj[k] === 'object') getTrueKeys(obj[k], res)
})
return res
}
console.log(getTrueKeys(object.user.userKeys))