2013-07-23 149 views
0

循环不输出真或假请看看并让我知道为什么循环的输出不正确?根据查询

基本上我循环浏览用户的friendId数组,并通过用户搜索结果查看它们是否匹配,具体取决于匹配,它应该返回true或false。

这里是我的循环代码:

User.findById(req.signedCookies.userid, function(err, signedInUser) { 
    //console.log(JSON.stringify(signedInUser.friendRequest)); 
    for (var x = 0; x < users.length; x++) { 
     users[x].isFriend = false; 
     //console.log(users[x].lastName); 
     for (var i = 0; i < signedInUser.friendRequest.length; i++) { 
      // console.log(users[x]._id + ' - ' + signedInUser.friendRequest[i].friendId); 
      //console.log(users[x].isFriend); 
      if (users[x]._id === signedInUser.friendRequest[i].friendId) { 
       users[x].isFriend = true; 
       console.log('test'); 
       break; 
      } 
     } 
    } 
    res.render('searchResults', { 
     title: 'Weblio', 
     userAdded: users 
    }); 
}); 

的console.log输出:

[{"friendId":"51ee2017c2023cc816000002","read":0,"date_requested":"2013-07-23T06 
:29:39.021Z"},{"friendId":"51ee203cc2023cc816000003","read":0,"date_requested":" 
2013-07-23T06:42:37.872Z"}] 
Jones 
51ee2017c2023cc816000002 - 51ee2017c2023cc816000002 
false 
51ee2017c2023cc816000002 - 51ee203cc2023cc816000003 
false 
Macks 
51ee203cc2023cc816000003 - 51ee2017c2023cc816000002 
false 
51ee203cc2023cc816000003 - 51ee203cc2023cc816000003 
false 

在用户签订的是约翰·史密斯和他搜索杰克

用户: John Smith id结束于01 杰克琼斯结束于02 杰克麦克斯结束于03

凡其实杰克Macks在friendId

console.log('test'); 

没有被outputed,所以我假设它甚至没有进入嵌套循环

这里的if语句是用于输入这些控制台日志我叫权控制台登录之前你感动:

console.log(users); 
console.log(signedInUser); 
console.log(users[x].isFriend); 

的结果是:

[ { firstName: 'Jake', 
    lastName: 'Jones', 
    email: '[email protected]', 
    password: '$2a$10$3ndDWiqOsyN.WN19fKJqq.xiC0B9da7QKTL74995zCT8vHrClo2uW', 
    phone: 98439843943, 
    birthday: Mon Jun 04 2012 20:00:00 GMT-0400 (Eastern Daylight Time), 
    _id: 51ee2017c2023cc816000002, 
    __v: 0, 
    friend: [], 
    friendRequest: [] }, 
    { firstName: 'Jake', 
    lastName: 'Macks', 
    email: '[email protected]', 
    password: '$2a$10$XTsGrWmmOH/3O3eNwrNK2u.XOwl5cPPGyKrzgU0RMROcGTtU1LkDK', 
    phone: 49372432922, 
    birthday: Mon Jun 04 2012 20:00:00 GMT-0400 (Eastern Daylight Time), 
    _id: 51ee203cc2023cc816000003, 
    __v: 0, 
    friend: [], 
    friendRequest: [] } ] 
{ __v: 0, 
    _id: 51ee1ddbc2023cc816000001, 
    birthday: Mon Aug 06 2012 20:00:00 GMT-0400 (Eastern Daylight Time), 
    email: '[email protected]', 
    firstName: 'John', 
    lastName: 'Smith', 
    password: '$2a$10$w6jTLvW.gUW5tY59/2/vIu8XPVsOe/NTr3e.Qc0WvVKIG8/MwSDW.', 
    phone: 1122334422, 
    friend: [], 
    friendRequest: 
    [ { date_requested: Tue Jul 23 2013 02:29:39 GMT-0400 (Eastern Daylight Time) 
, 
     read: 0, 
     friendId: 51ee2017c2023cc816000002 }, 
    { date_requested: Tue Jul 23 2013 02:42:37 GMT-0400 (Eastern Daylight Time) 
, 
     read: 0, 
     friendId: 51ee203cc2023cc816000003 } ] } 
false 
[ { firstName: 'Jake', 
    lastName: 'Jones', 
    email: '[email protected]', 
    password: '$2a$10$3ndDWiqOsyN.WN19fKJqq.xiC0B9da7QKTL74995zCT8vHrClo2uW', 
    phone: 98439843943, 
    birthday: Mon Jun 04 2012 20:00:00 GMT-0400 (Eastern Daylight Time), 
    _id: 51ee2017c2023cc816000002, 
    __v: 0, 
    friend: [], 
    friendRequest: [] }, 
    { firstName: 'Jake', 
    lastName: 'Macks', 
    email: '[email protected]', 
    password: '$2a$10$XTsGrWmmOH/3O3eNwrNK2u.XOwl5cPPGyKrzgU0RMROcGTtU1LkDK', 
    phone: 49372432922, 
    birthday: Mon Jun 04 2012 20:00:00 GMT-0400 (Eastern Daylight Time), 
    _id: 51ee203cc2023cc816000003, 
    __v: 0, 
    friend: [], 
    friendRequest: [] } ] 
{ __v: 0, 
    _id: 51ee1ddbc2023cc816000001, 
    birthday: Mon Aug 06 2012 20:00:00 GMT-0400 (Eastern Daylight Time), 
    email: '[email protected]', 
    firstName: 'John', 
    lastName: 'Smith', 
    password: '$2a$10$w6jTLvW.gUW5tY59/2/vIu8XPVsOe/NTr3e.Qc0WvVKIG8/MwSDW.', 
    phone: 1122334422, 
    friend: [], 
    friendRequest: 
    [ { date_requested: Tue Jul 23 2013 02:29:39 GMT-0400 (Eastern Daylight Time) 
, 
     read: 0, 
     friendId: 51ee2017c2023cc816000002 }, 
    { date_requested: Tue Jul 23 2013 02:42:37 GMT-0400 (Eastern Daylight Time) 
, 
     read: 0, 
     friendId: 51ee203cc2023cc816000003 } ] } 
false 
+1

的输出是什么,以及你所期望的输出? – Dan455

+0

我在搜索结果中添加了针对每个用户返回为假2次的输出... – Lion789

+2

在当前文章中,您的console.log语句在赋值之前。 –

回答

4

您遇到的一个问题是您尝试记录isFriend结果的位置。当您在进入搜索循环时将isFriend设置为false后,它正在记录。

该语句需要在inner for循环之后移动。

如果没有所有的输入,就很难猜测问题出在哪里。

使用以下内容作为输入(您可以提供JSON格式的实际输入内容吗?):

var users = [ 
    { 
     lastName: 'Smith', 
     '_id': "51ee2017c2023cc816000001" 
    }, 
    { 
     lastName: 'Jones', 
     '_id': "51ee2017c2023cc816000002" 
    }, 
    { 
     lastName: 'Macks', 
     '_id': "51ee2017c2023cc816000003" 
    } 
]; 

var signedInUser = { 
    friendRequest: [{ 
     "friendId": "51ee2017c2023cc816000002", 
     "read": 0, 
     "date_requested": "2013-07-23T06:29:39.021Z" 
    }, { 
     "friendId": "51ee203cc2023cc816000003", 
     "read": 0, 
     "date_requested": "2013-07-23T06:42:37.872Z" 
    }] 
}; 

function test(err, signedInUser) { 
    console.log("\nsignedInUser.friendRequest\n" + JSON.stringify(signedInUser.friendRequest, null, 2)); 
    for (var x = 0; x < users.length; x++) { 
     users[x].isFriend = false; 
     console.log("\n" + users[x].lastName); 
     for (var i = 0; i < signedInUser.friendRequest.length; i++) { 
      console.log(users[x]._id + ' - ' + signedInUser.friendRequest[i].friendId); 
      if (users[x]._id === signedInUser.friendRequest[i].friendId) { 
       users[x].isFriend = true; 
       console.log('test'); 
       break; 
      } 
     } 
     console.log(users[x].isFriend); 
    } 

    console.log("\nFinal users:\n" + JSON.stringify(users, null, 2)); 
} 

test(null, signedInUser); 

我看到以下结果:

signedInUser.friendRequest 
[ 
    { 
    "friendId": "51ee2017c2023cc816000002", 
    "read": 0, 
    "date_requested": "2013-07-23T06:29:39.021Z" 
    }, 
    { 
    "friendId": "51ee203cc2023cc816000003", 
    "read": 0, 
    "date_requested": "2013-07-23T06:42:37.872Z" 
    } 
] 

Smith 
51ee2017c2023cc816000001 - 51ee2017c2023cc816000002 
51ee2017c2023cc816000001 - 51ee203cc2023cc816000003 
false 

Jones 
51ee2017c2023cc816000002 - 51ee2017c2023cc816000002 
test 
true 

Macks 
51ee2017c2023cc816000003 - 51ee2017c2023cc816000002 
51ee2017c2023cc816000003 - 51ee203cc2023cc816000003 
false 

Final users: 
[ 
    { 
    "lastName": "Smith", 
    "_id": "51ee2017c2023cc816000001", 
    "isFriend": false 
    }, 
    { 
    "lastName": "Jones", 
    "_id": "51ee2017c2023cc816000002", 
    "isFriend": true 
    }, 
    { 
    "lastName": "Macks", 
    "_id": "51ee2017c2023cc816000003", 
    "isFriend": false 
    } 
] 

除了日志语句在错误的地点(我不认为我改变了你的代码的语义),这一套的输入,逻辑起作用。您期望的输入可能不是您正在接收的内容。

原来,OP用猫鼬本地驱动程序和的NodeJS,研究后找到了答案,这里的问题比较部分:Comparing mongoose _id and strings

+0

好的我已经包含了通过console.log调用它们的输入和结果,因为你可以看到两个用户都在friendId数组中,所以我不确定它为什么显示为false,甚至没有进入循环,因为控制台.LOG( '试验');不叫 – Lion789

+0

有你的问题。您正在比较'_id:51ee2017c2023cc816000002'(不是字符串)到''friendId“:”51ee2017c2023cc816000002“'(字符串) – dc5

+0

我在friendId - {friendId:mongoose.Types.ObjectId(req.body。 friendRequest)是不会将其更改为ID,那么我该如何解决它? – Lion789

0

这是一种野生的猜测,但我怀疑你正试图在这里返回值:

res.render('searchResults', {title: 'Weblio', userAdded: users }); 

如果是这样,用户添加会有下的用户集合userAdded,不是真/假。

当您断开循环并将该变量用作返回值时,您可能需要将布尔值设置为true(例如,myVariable = true)。

+0

你是对的,但是,users.isFriend现在应该是一个可以在值no上调用的方法吗? – Lion789

+0

isFriend值将在集合的每个_element_上,例如:users [0] .isFriend和users [1] .isFriend –

+0

正确,并且它应该返回true或false,取决于循环中的结果是0还是1 ? – Lion789