Javascript 无法使用Object.keys(doc.forEach)读取未定义的属性

Javascript 无法使用Object.keys(doc.forEach)读取未定义的属性,javascript,express,Javascript,Express,我得到了无法读取未定义错误的属性“repeats”,但在控制台日志记录时,似乎对象定义良好,因此我不知道代码为何崩溃 下面是doc对象的控制台日志: 下面是meta的控制台日志: 用户\u controller.js-有问题的路由 exports.user_details_post = [(req, res, next)=> { //LOG console.log(`Request: ${util.inspect(req.body)}`); // &

我得到了无法读取未定义错误的属性“repeats”,但在控制台日志记录时,似乎对象定义良好,因此我不知道代码为何崩溃

下面是doc对象的控制台日志:

下面是meta的控制台日志:

用户\u controller.js-有问题的路由

    exports.user_details_post = [(req, res, next)=> {
        //LOG
        console.log(`Request: ${util.inspect(req.body)}`); // <-- ALL GOOD HERE
        next();
        },
        //VALIDATE
        body('email', 'Must be valid email.').isLength({min: 5}).trim(),
        //SANITIZE
        sanitizeBody('*').escape(),
        //SAVE
        (req,res, next) =>{
            let user = UserObj.findById(req.params.id, function(err,doc){
                const errors = validationResult(req);
                let activeArr = [];
                let maxActive = 0;

                if (err) {}
                console.log(`RESULT DOC: ${util.inspect(doc)}`); // <-- ALL GOOD HERE. DOC APPEARS WELL-FORMED
                Object.keys(doc).filter(sec=>sec!=="_id" && sec!=="__v").forEach(sec=>{
                    console.log(`SEC: ${util.inspect(sec)}`); // <-- PROBLEM HERE! 
                                                              // "Sec" is "$___", but should be 
                                                              // "authData", "nameData", etc. 
                                                              // Note, I also tried 
                                                              // "Object.keys(JSON.parse(doc)).filter.  
                                                              // but that didn't work either
                    if (!!meta[sec].repeats) {                // CRASHES HERE. "Meta" is well-defined,                                      
                                                              // and has fields "authData", "emailData",
                                                              // etc., but "sec" seems to be problematic
                        Object.keys(sec).forEach(fld=> {

. . . 
. . .
                }
            })
    }];

显然,Object.keysdoc.forEachsec=>。构造似乎有问题,因为sec显示为$\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


允许遍历Object.keys和normal.OK。非常感谢。至少我知道我离基地不远。如果我知道Object.keys的输出为什么不能按预期工作,我将非常感激。那么,您已经。。。在你的问题中,那些财产难道不在那里吗?非常感谢!就是这样!事实证明,findById返回的对象中添加了许多额外的隐藏字段/节,这些字段/节让我大吃一惊。这些隐藏字段包括:$\u、isNew、errors、\u doc、$locals和$init。非常感谢你!
META: { authData:
   { label: 'Authentication',
     depth: 4,
     hidden: false,
     repeats: false },
  nameData: { label: 'Name', depth: 5, hidden: false, repeats: false },
. . . 
. . . 
}
    exports.user_details_post = [(req, res, next)=> {
        //LOG
        console.log(`Request: ${util.inspect(req.body)}`); // <-- ALL GOOD HERE
        next();
        },
        //VALIDATE
        body('email', 'Must be valid email.').isLength({min: 5}).trim(),
        //SANITIZE
        sanitizeBody('*').escape(),
        //SAVE
        (req,res, next) =>{
            let user = UserObj.findById(req.params.id, function(err,doc){
                const errors = validationResult(req);
                let activeArr = [];
                let maxActive = 0;

                if (err) {}
                console.log(`RESULT DOC: ${util.inspect(doc)}`); // <-- ALL GOOD HERE. DOC APPEARS WELL-FORMED
                Object.keys(doc).filter(sec=>sec!=="_id" && sec!=="__v").forEach(sec=>{
                    console.log(`SEC: ${util.inspect(sec)}`); // <-- PROBLEM HERE! 
                                                              // "Sec" is "$___", but should be 
                                                              // "authData", "nameData", etc. 
                                                              // Note, I also tried 
                                                              // "Object.keys(JSON.parse(doc)).filter.  
                                                              // but that didn't work either
                    if (!!meta[sec].repeats) {                // CRASHES HERE. "Meta" is well-defined,                                      
                                                              // and has fields "authData", "emailData",
                                                              // etc., but "sec" seems to be problematic
                        Object.keys(sec).forEach(fld=> {

. . . 
. . .
                }
            })
    }];
Object.keys(doc).forEach(sec => {
    if (meta.hasOwnProperty(sec) && meta[sec].repeats) {
        ...
    }
});