Как я могу проверить, существует ли определенное значение в моем массиве?

#arrays #ejs

#массивы #ejs

Вопрос:

Я извлекаю из базы данных (MongoDB с помощью Mongoose) список «комментариев», и каждый комментарий содержит массив разрешенных пользователей, которые могут видеть эти комментарии. Как я могу проверить, находится ли зарегистрированный пользователь в этом массиве?

       <% if(comment.allowed.length  > 0 ){  %>
         <% for(i = 0 ; i < comment.allowed.length; i  ) { %>
             <% if(comment.allowed[i] === auth) {  %>
                    You already payed
             <%  } else { %>
                    <form action="/pay" method="POST">
                         <button class="button-upload">Pay $1</button>
                    </form>                                     
             <% } %>
         <% } else {  %>
                    <form action="/pay" method="POST">
                         <button class="button-upload">Pay $1</button>
                    </form>
          <% } %>
       <% } %>
  

Я сделал это, но в моем массиве я получил 2 электронных письма: email1@mail.com и email2@mail.com .
Зарегистрированный пользователь email1@mail.com , и на моей странице я получил и «вы уже заплатили», и эту форму с кнопкой, потому что первое значение было true, а затем второе значение было false. В моем файле .js, где я отображаю страницу, я могу использовать array.includes(значение), но здесь я не могу. Как я могу отобразить только один из этих случаев? Есть много других комментариев, и для каждого я должен это проверить, поэтому я не делаю этого в своем файле .js, я бы потерял представление о том, какой комментарий может видеть зарегистрированный пользователь или нет.

Есть ли какой-либо эквивалент array.includes(value), который я могу использовать в своем EJS-файле, или какое-либо решение для достижения того, чего я хочу? Заранее спасибо!

Ответ №1:

Это больше похоже на вопрос о массиве javascript, чем на mongodb.

Для этого есть много способов, и я собираюсь упомянуть некоторые из них.

Обычный способ сделать это — перебрать массив и проверить, соответствует ли значение тому, что вы ищете (авторизованный пользователь).

допустим, ваш массив разрешенных пользователей

 let arr = ["bob@bob.com", "divine@gmail.com", "email1@mail.com", "email2@mail.com"]
  

и ваш текущий зарегистрированный пользователь email1@mail.com ,

решение 1 (Array.find):

 const loggedInUser = "email2@mail.com"
const result = arr.find(value => value === loggedInUser) // This is going to 
// return "undefined" if loggedInUser is not in the array of allowed users.

if(result){
   // Do something
}
  

Ваш шаблон должен выглядеть так

 <% if(comment.allowed.length  > 0 ){  %>
       <% if(comment.allowed.find(value => value === auth)) {  %>
              You already payed
       <%  } else { %>
              <form action="/pay" method="POST">
                   <button class="button-upload">Pay $1</button>
              </form>                                     
       <% } %>
<% } %>
  

несколько других способов проверить, существует ли что-то в массиве::

 const result = arr.indexOf(loggedInUser) // Array.indexOf -- Check if the value is not less than zero

const result = arr.filter(v => v === loggedInUser).join(' ') // Array.filter -- Returns the "loggedInUser" value

const result = arr.includes(loggedInUser) // Array.includes -- Returns a boolean