这让我疯狂了好几个小时,看看这个简单的循环:
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' ]
这有效并产生了预期的输出。
但我无法理解为什么“真正的”版本没有。在查看输出时,我看不到问题。
小贴士赞赏! 感谢
答案 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');
}
});