Một vấn đề bạn gặp phải là vị trí mà bạn đang cố gắng ghi lại kết quả của isFriend. Nó hiện đang được ghi lại ngay sau khi bạn đặt isFriend thành false khi bạn vào vòng lặp tìm kiếm.
Câu lệnh đó cần được di chuyển ngay sau vòng lặp for bên trong.
Nếu không có tất cả các đầu vào, rất khó đoán được vấn đề có thể nằm ở đâu.
Sử dụng thông tin sau làm đầu vào (Bạn có thể cung cấp thông tin đầu vào thực tế ở định dạng JSON không?):
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);
Tôi thấy các kết quả sau:
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
}
]
Khác với câu lệnh nhật ký được đặt sai chỗ (tôi không nghĩ rằng tôi đã thay đổi ngữ nghĩa của mã của bạn), với tập hợp đầu vào này, logic hoạt động. Có thể đầu vào mà bạn mong đợi không phải là những gì bạn đang nhận.
Hóa ra OP đang sử dụng trình điều khiển gốc mongoose cho nodejs và sau khi nghiên cứu đã tìm thấy câu trả lời cho phần so sánh của vấn đề ở đây: So sánh mongoose _id và các chuỗi