#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