匹配值不会被识别为匹配

时间:2015-10-23 06:55:40

标签: javascript arrays

这让我疯狂了好几个小时,看看这个简单的循环:

  myEvent.users.forEach( function( user ){

    console.log(user._id + '     ' + req.body.dogId );
    if ( user._id === req.body.dogId ){
      console.log('yay..');
    }else {
      console.log('no match');
    }
  });

生成以下输出:

      // 560d2cd0475f9ca012a7b2b2    560d2cd0475f9ca012a7b2b2
      // no match
      // 560d2cdd475f9ca012a7b2b3     560d2cd0475f9ca012a7b2b2
      // no match
      // 5613c6ee71dfaeac24371082     560d2cd0475f9ca012a7b2b2
      // no match

第一项是匹配但未被识别。 我一直在尝试几个不同的循环,结果相同。

我还制作了数组的硬编码版本:

 var arr = ['5613c6ee71dfaeac24371082', '560d2cdd475f9ca012a7b2b3','5613c6ee71dfaeac24371082' ]

这有效并产生了预期的输出。

但我无法理解为什么“真正的”版本没有。在查看输出时,我看不到问题。

小贴士赞赏! 感谢

1 个答案:

答案 0 :(得分:1)

我认为问题是由于您要比较的两个值的数据类型不同。 ===(等值和相等类型)运算符比较值和数据类型。在比较之前使用String(object)函数将Object类型值转换为字符串。

myEvent.users.forEach( function( user ){

console.log(user._id + '     ' + req.body.dogId );
if ( String(user._id) === req.body.dogId ){
  console.log('yay..');
}else {
  console.log('no match');
}
});