【问题标题】:How to check if array contains a value in Javascript如何检查数组是否包含Javascript中的值
【发布时间】:2016-07-15 11:03:19
【问题描述】:

我有一个 json 对象,它有一个数组属性“partners”,如下所示:

    { 
    "_id" : ObjectId("578667b1bb14ca1c2773adaa"), 
    "customer" : null,  
    "created" : ISODate("2016-07-13T16:09:21.015+0000"), 
    "description" : "", 
    "subject" : "case 2", 
    "__v" : NumberInt(5), 
    "partners" : [
        ObjectId("57857d93038aacd81ef3ad55"), 
        ObjectId("57857d93038aacd81ef3ad56")
    ]
}

我想使用以下代码检查合作伙伴数组中是否已存在元素:

 _.includes(case_.partners, partner._id)

你知道我为此使用了 lodash,但由于某种原因无法正常工作,我不知道为什么,有人知道这里有什么问题吗?

【问题讨论】:

  • 我刚刚注意到 partner._id 返回的东西 '57857d93038aacd81ef3ad55' 不像 'ObjectId("57857d93038aacd81ef3ad55")' 也许这肯定是问题......检查数组上的重复元素时格式是否相同?
  • 在向数组中插入值时,我是这样插入的:case_.partners.push(partner._id);所以它插入为 'ObjectId("57857d93038aacd81ef3ad55")' 但在比较合作伙伴时。_id 是 '57857d93038aacd81ef3ad55' 和 idk 为什么
  • 请将您在 cmets 中分享的信息添加到您的问题中。
  • 请提供一个 jsfiddle 或嵌入的脚本来解决问题,因为不清楚 ObjectId 在这里是什么意思。不能直接比较ObjectId('some string')'some string'的结果:一个是Object,另一个是字符串,结果总是false

标签: javascript node.js lodash


【解决方案1】:

据我了解,您提供的partners 示例是一个javascript 对象,您应该尝试在Json 中使用原始类型值。

您可以通过以下方式将ObjectId 转换为String

ObjectId("578667b1bb14ca1c2773adaa") + '';

ObjectId("578667b1bb14ca1c2773adaa").toHexString();

Json 对象应该是这样的:

{ 
"_id" : "578667b1bb14ca1c2773adaa", 
"customer" : null,  
"created" : "2016-07-13T16:09:21.015+0000", 
"description" : "", 
"subject" : "case 2", 
"__v" : 5, 
"partners" : [
    "57857d93038aacd81ef3ad55", 
    "57857d93038aacd81ef3ad56"
]}

所以解决方法是,将Javascript对象转换为Json对象,然后进行比较。

【讨论】:

  • 如果我将合作伙伴 ID 存储为 '57857d93038aacd81ef3ad55' 而不是像 'ObjectId("57857d93038aacd81ef3ad55")' 我可以在展示案例时填充合作伙伴吗?
  • 是的,我想是的,你也可以试试 _.contains 而不是包含
  • _.contains 说不是函数
  • 当我这样做时:case_.partners.push(partner._id);它会自动广告 ObjectId(),我如何只插入没有 ObjectId() 的键
  • _.contains,我的打字错误
猜你喜欢
  • 2021-09-10
相关资源
最近更新 更多