【问题标题】:Not returning true when value matches值匹配时不返回 true
【发布时间】:2020-02-03 02:55:21
【问题描述】:

所以我有这个功能。 InscripcionesDB 是一个classesID 的列表,而claseDB 只是一个classID

async function verificarInscripcion(claseId, username) {

   var inscripcionesDB = await obtenerInscripciones(username);
   var claseDB = await Clase.findOne({ _id: claseId })


   for (let i = 0; i < inscripcionesDB.length; i++) {

       if (inscripcionesDB[i]._id == claseDB._id) {


           console.log(true);

       }

       console.log(false);

       console.log(inscripcionesDB[i]._id, 'CLASSESID');
       console.log(clasedb._id, 'CLASSID');

   }

}


所以问题是,有一个 elementId 匹配,但输出总是错误的。我做错了什么?这是输出:

5d959aa70d3ee404889d2b26 CLASSESID
5d82e4dc5770f32b50246657 CLASSID
false
5d959abc0d3ee404889d2b28 CLASSESID
5d82e4dc5770f32b50246657 CLASSID
false
5d82e4dc5770f32b50246657 CLASSESID // THIS ONE IS MATCHING
5d82e4dc5770f32b50246657 CLASSID //
false

【问题讨论】:

  • clasedb !== claseDB我不知道前者是什么,但它是你记录的。您正在检查后者。
  • 不确定,但您可以尝试在比较之前将您的两个 ID 转换为字符串,例如 if (inscripcionesDB[i]._id.toString() == claseDB._id.toString())
  • 为什么你findOne by id 只是为了得到找到的对象的id?您已经拥有claseId 中的 ID。您还可以在 inscripcionesDB 上调用 find
  • .toString() 完美运行。为什么这适用于 .tostring 而不是没有它?
  • 就像@MohammedAmirAnsari 说的,在猫鼬中有一个虚拟的get 是.id,所以尝试这样做:inscripcionesDB[i].id == claseDB.id id 被转换为字符串而不是对象

标签: arrays node.js for-loop if-statement


【解决方案1】:

您正在控制台记录此:console.log(clasedb._id, 'CLASSID');,但您正在比较此:inscripcionesDB[i]._id == claseDB._id 尝试比较 inscripcionesDB[i]._id == clasedb._id,但也尝试控制台记录 claseDB,因为我认为这是您真正有兴趣比较的内容.您可能还希望将 console.log('false') 放在 else 块中,因为它总是会记录为 false。

【讨论】:

    猜你喜欢
    • 2012-12-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    相关资源
    最近更新 更多