foreach l oop не перебирает строковый массив - PullRequest
3 голосов
/ 24 февраля 2020

Я пытаюсь использовать для каждого l oop, чтобы проверить, есть ли идентификатор пользователя в группе черного списка, которую я создал. Когда я пытаюсь перебрать строковый массив userID, он говорит blacklisted.forEach is not a function. Почему это так?

  query = { messageTrackingId: req.query.messageId };
    messageId = true;
    Messages.find(query)
      .populate("creator", "username")
      .then(documents => {
        console.log("documents is");
        console.log(documents[0].creatorId);
        let otherUser;
        if (documents[0].creatorId === req.query.creatorId) {
          console.log("ITS A MATCH!")
          otherUser = documents[0].recipientId;
        }
        else if (documents[0].recipientId === req.query.creatorId) {
          console.log("ITS not a match!")
          otherUser = documents[0].creatorId;
        }

        let blacklisted = false;
        User.find({ _id: otherUser }).select("blacklistGroup").then((res) => {

          blacklisted = res[0].blacklistGroup;
          console.log("BLACKLIST SERVER RESPONSE");
          console.log(blacklisted);

          blacklisted.forEach(function(entry) {
            console.log(entry);
        });

КОНСОЛЬНЫЙ ВЫХОД

documents is
5e52cca7180a7605ac94648f
ITS not a match!
BLACKLIST SERVER RESPONSE
[ '5e52e8af484eba456ca9e814',
  '5e52f2cc673de71f60019c76',
  '5e52f316673de71f60019c77' ]
(node:12992) UnhandledPromiseRejectionWarning: TypeError: blacklisted.forEach is not a function

Ответы [ 3 ]

1 голос
/ 25 февраля 2020

Я понял, что по какой-то причине, когда я console.log(res[0].blacklistGroup) возвращал

[ '5e52e8af484eba456ca9e814',
  '5e52f2cc673de71f60019c76',
  '5e52f316673de71f60019c77' ]

, который также возвращает тип Object. Чтобы решить эту проблему, я сделал следующее:


let MyBlacklist = JSON.stringify(res[0].blacklistGroup);
MyBlacklist = JSON.parse(MyBlacklist);

, затем я смог от l oop до

          let counter = 0;
          for (let i = 0; i < MyBlacklist.length; i++) {
            counter++;
            console.log(MyBlacklist[i]);
            console.log(counter);

          }

OUTPUT:

5e52e8af484eba456ca9e814
1
5e52f2cc673de71f60019c76
2
5e52f316673de71f60019c77
3

0 голосов
/ 25 февраля 2020

Являетесь ли вы выражением "Пользователь", действующим как fetch? Если это так, вам, возможно, придется преобразовать свой ответ в json перед его использованием. Что-то вроде ...

User.find({ _id: otherUser }).select("blacklistGroup")
    .then(res => res.json()) 
    .then(json => {
        blacklisted = json.blacklistGroup;
        console.log("BLACKLIST SERVER RESPONSE");
        console.log(blacklisted);
    });
});
0 голосов
/ 24 февраля 2020

Я не уверен, почему он будет отображаться в виде массива, если это объект, но вы пытались создать из него новый массив и повторить его? Например:

blacklisted = [...res[0].blacklistGroup];
blacklisted.forEach(function(entry) {
    console.log(entry);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...