Проверка, содержит ли массив объект nodejs - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь увидеть inline, если массив из базы данных mongodb содержит указанный c объект, но я просто не могу заставить его работать.

Я искал разные решения и перепробовал все; Array.some, Array.include, Array.indexOf et c et c.

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

<div class="ui three buttons">
        <% if(task.leaders.includes(currentUser)){ %>
          <button form="deleteTaskForm" class="ui basic negative button"><i class="ui icon trash alternate"></i></button> 
          <a class="ui basic orange button" href="/task/<%= task._id %>/edit"><i class="ui icon edit"></i></a> <% }
          else{ %>
          <div style="opacity: 40%;" class="ui basic negative button popupButton" data-content="Only the leader of the task can remove this task."><i class="ui icon trash alternate"></i></div>
          <div style="opacity: 40%;" class="ui basic orange button popupButton" data-content="Only the leader of the task can edit this task."><i class="ui icon edit"></i></div>
          <% } %>
        <button form="doneTaskForm" class="ui basic green button"><i class="ui icon check square"></i></button>
      </div>

Array.prototype.some ()

<div class="ui three buttons">
        <% if(task.leaders.some(leader => leader._id == currentUser._id)){ %>
          <button form="deleteTaskForm" class="ui basic negative button"><i class="ui icon trash alternate"></i></button> 
          <a class="ui basic orange button" href="/task/<%= task._id %>/edit"><i class="ui icon edit"></i></a> <% }
          else{ %>
          <div style="opacity: 40%;" class="ui basic negative button popupButton" data-content="Only the leader of the task can remove this task."><i class="ui icon trash alternate"></i></div>
          <div style="opacity: 40%;" class="ui basic orange button popupButton" data-content="Only the leader of the task can edit this task."><i class="ui icon edit"></i></div>
          <% } %>
        <button form="doneTaskForm" class="ui basic green button"><i class="ui icon check square"></i></button>
      </div>

РЕДАКТИРОВАТЬ: решаемые. Это решение, которое заставило его работать на меня.

<div class="ui three buttons">
        <% if(task.leaders.some(leader => leader._id.equals(currentUser._id))){ %>
          <button form="deleteTaskForm" class="ui basic negative button"><i class="ui icon trash alternate"></i></button> 
          <a class="ui basic orange button" href="/task/<%= task._id %>/edit"><i class="ui icon edit"></i></a> <% }
          else{ %>
          <div style="opacity: 40%;" class="ui basic negative button popupButton" data-content="Only the leader of the task can remove this task."><i class="ui icon trash alternate"></i></div>
          <div style="opacity: 40%;" class="ui basic orange button popupButton" data-content="Only the leader of the task can edit this task."><i class="ui icon edit"></i></div>
          <% } %>
        <button form="doneTaskForm" class="ui basic green button"><i class="ui icon check square"></i></button>
      </div>

1 Ответ

0 голосов
/ 26 апреля 2020

Сравнение объекта - тяжелая задача на javascript, решение, которое вам нужно, сравнивает уникальное свойство объекта

if (task.leaders.some(lead => lead.user.id == currentUser.id)) {
  // Do something
}

Чтение Array.prototype.some() здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

Вы также можете использовать https://lodash.com/docs/#isEqual, если вам нужно сравнить объект

РЕДАКТИРОВАТЬ:

Если вы сравниваете mongodb ObjectId, вам нужно сделать это { ссылка } необработанный результат ObjectId не является простой строкой, поэтому вы не можете сравнить, используя ==

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...