Node.js迭代对象键';钥匙

Node.js迭代对象键';钥匙,node.js,object,Node.js,Object,好吧,我知道这个标题有点让人困惑(可能很多),所以让我解释一下。在像mongoose模式这样的对象变量中,可以有字符串、数字、布尔值等类型。。。但是,如果类型是新对象,该怎么办?如果这个物体里面有另一个物体呢 假设我在这里得到了这个模式: user: { username: 'bob1', password: '1234', email: 'someone@example.com', profile: { name: { f

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

假设我在这里得到了这个模式:

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
在我的文件中创建一个新的临时对象,只返回模式中的值,这些值在
userKeys
字段中具有值
true
'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',密码:'1234',电子邮件:'someone@example.com,个人资料:{name:{first:'Bob',last:'Marley'},性别:{male',国家:'US'},用户密钥:{username:{show:true},密码:{show:false},电子邮件:{show:maybe'},个人资料:{name:{first:{show:true},last:{show:true},性别:{show:false},国家:{show:'可能'}}
函数getTrueKeys(obj,res=[]){
Object.keys(obj.forEach)(k=>{
if(obj[k].show&(obj[k].show==true | | obj[k].show==maybe'))res.push(k)
if(对象的类型[k]=“object”)getTrueKeys(对象[k],res)
})
返回res
}
log(getTrueKeys(object.user.userKeys))
递归。请参阅