【问题标题】:Checking if array contains object nodejs检查数组是否包含对象nodejs
【发布时间】:2020-08-09 10:52:01
【问题描述】:

我正在尝试查看来自 mongodb 数据库的数组是否包含特定对象,但我无法让它工作。

我一直在寻找不同的解决方案并尝试了所有方法; Array.some、Array.includes、Array.indexOf 等。

我对此很陌生,所以我可能有一些误解,有人知道我做错了什么吗?该应用程序正常启动,没有错误消息,但它说每个人都是“领导者”,而他们不是。

<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>

【问题讨论】:

    标签: arrays node.js mongodb object mongoose


    【解决方案1】:

    比较对象是 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,您需要这样做 https://stackoverflow.com/a/11638106/10216251 ObjectId 的原始结果不是纯字符串,因此您无法使用 == 进行比较

    【讨论】:

    • 感谢您的回答。我也尝试过 Array.prototype.some() 但无济于事。知道为什么吗?我已经用我的例子编辑了我上面的帖子。
    • 你的leader._id是否等于currentUser._id
    • 是的,我已经通过在应用程序和 console.log 中打印进行了双重检查,但它们显示的 id 完全相同。
    • 无法用==比较mongodb ObjectID,我已经编辑了我的答案
    • 是的!我已将我的帖子编辑为解决方案!谢谢!
    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 2021-12-21
    • 2015-01-24
    • 2015-01-22
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多