繁体   English   中英

尝试使用 Array.prototype.filter 访问嵌套的 object 字段时出现未定义错误

[英]Getting undefined error trying to access nested object field using Array.prototype.filter

我正在使用下面的查询从 model 获取所有 forms;

query = await Form.find({}).populate('assigned_to');

查询结果如下;

[{
        **
        Some Other Fields **
        assigned_to: {
            links: [Array],
            _id: 5 d7a903d8b8f3e0ced2dd308,
            name: 'Test E 2',
            email: 'te2@somedomain.com',
            school: 5 d79e99b4d4df989ea771525,
            department: 5 d79e99b4d4df989ea771526,
            role: 'some_role',
            __v: 0
        },
    }, 
      **
    OTHER OBJECT 
      **
]

运行 Array.prototype.filter;

waiting = query.filter(form =>
form.assigned_to._id == req.user._id);

尝试访问嵌套的assigned_to的属性_id会返回错误;

无法读取未定义的属性“id”

我理解错误的性质是,并非所有 forms 都同时有一个assigned_to嵌套 object,这将导致该错误,因为仅在具有该嵌套对象的表单上运行过滤器。

如何改进此过滤器以应对并非所有 forms 都已分配到嵌套 object 的可能性?

编辑:为了简洁起见,我最初并没有指出它查询是一个对象数组。

回答您的问题“我如何改进此过滤器以适应不是 forms 已分配_to 嵌套 object 的可能性? ”。 确保查询返回一个数组。

这将确保键“assigned_to”是否存在。 您可以使用过滤器方法,例如:-

arr.filter(elem => (elem.assigned_to && elem.assigned_to._id &&
elem.assigned_to._id === req.user._id));

另一种方式

arr.filter(elem => {
  if(elem.assigned_to && elem.assigned_to._id) {
    if (elem.assigned_to._id === req.user._id) {
      return elem;
    }
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM