Node.js迭代对象键的键



好的,所以我知道标题令人困惑(可能很多(,所以让我解释一下。在像猫鼬模式这样的对象变量中,可以有字符串、数字、布尔值等类型。但是,如果类型是新对象怎么办?如果该对象内部有另一个对象怎么办?

假设我在这里得到了这个架构:

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在我的文件中创建一个新的临时对象,仅返回架构中具有值的值trueuserKeys字段中的值或'maybe'。如何通过迭代基本结构中的键以及另一个对象内部的对象内的键来做到这一点?我试图这样做

Object.keys(user.userKeys).forEach((key) => {
const cur = user[key];
if (typeof cur === Object) {
Object.keys(user.userKeys[key]).forEach((ok) => {
console.log(ok, user.userKeys[ok].show);
myObj.push(cur);
});
}
});

但它不会记录属于对象的任何内容(例如:profile.name 或 profile.country(。

我感谢任何提示。

有好的一天

您可以创建一个简单的函数,该函数获取一个对象并查看每个键以查看是否有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))

最新更新