【问题标题】:Accessing single field from object in array从数组中的对象访问单个字段
【发布时间】:2016-09-26 18:48:33
【问题描述】:

我在 MongoDB 中使用 Meteor,但似乎无法弄清楚如何从对象数组中的对象访问单个字段。

我的文件:

  {
     "_id" : "p6c4cSTb3cHWaJqpG",
     "createdAt" : ISODate("2016-05-11T11:30:11.820Z"),
     "username" : "admin",
     "contacts" : [ 
         {
            "when" : ISODate("2016-05-11T11:30:32.350Z"),
            "who" : "4YBufbE9PByJBkasy"
         }, 
         {
            "when" : ISODate("2016-05-25T11:52:49.745Z"),
            "who" : "z792kEEYbxyzyEAKp"
         }, 
         {
            "when" : ISODate("2016-05-26T13:47:43.439Z"),
            "who" : "4YBufbE9PByJBkasy"
         }, 
         {
            "when" : ISODate("2016-05-26T13:48:22.828Z"),
            "who" : "4YBufbE9PByJBkasy"
         }
     ]
}

我想检查userId 是否在任何对象中,特别是在who 字段中。

我的服务器端代码:

 var me = Meteor.userId();
 var findMe = Meteor.users.findOne(me);

 if (_.include(findMe.contacts, {who: 4YBufbE9PByJBkasy})){
        console.log("found in array");
    }else{
        console.log("Not found in array");
    }
}

我已经尝试了几种不同的方法,但什么都没有。

当我console.log(findMe.contacts); 时,它会返回应有的整个数组。但是当我尝试console.log(findMe.contacts.who); 时,它返回undefined

只需要一些关于如何访问对象数组字段的指导。谢谢!

【问题讨论】:

  • findMe.contacts 是一个数组,它没有属性who,为了访问数组的元素之一,您必须提供如下索引:findMe.contacts[0].who
  • 这是有道理的。我试过了,但是看到你的我现在意识到我的语法是错误的。那么如何在who 字段中检查所有对象的字符串呢?对对象数量执行count 之类的操作,然后对每个对象执行循环似乎比必要的工作更多,但我可能是错的。
  • 如果不检查每个项目,就无法检查每个项目 :-) 此外,通过少量编辑,您可以拥有 minimal, complete, verifiable example

标签: javascript arrays node.js mongodb meteor


【解决方案1】:

遍历一个数组来查看它是否包含一个值很容易 用Array.prototype.some完成:

var data = {
    "_id" : "p6c4cSTb3cHWaJqpG",
    "createdAt" : "2016-05-11T11:30:11.820Z",
    "username" : "admin",
    "contacts" : [
        {
            "when" : "2016-05-11T11:30:32.350Z",
            "who" : "4YBufbE9PByJBkasy"
        },
        {
            "when" : "2016-05-25T11:52:49.745Z",
            "who" : "z792kEEYbxyzyEAKp"
        },
        {
            "when" : "2016-05-26T13:47:43.439Z",
            "who" : "4YBufbE9PByJBkasy"
        },
        {
            "when" : "2016-05-26T13:48:22.828Z",
            "who" : "4YBufbE9PByJBkasy"
        }
    ]
};

var hascontact = function(contacts, id){
    return contacts.some(function(contact){
        return contact.who === id;
    });
};

console.log(hascontact(data.contacts,'4YBufbE9PByJBkasy'));
console.log(hascontact(data.contacts,'z792kEEYbxyzyEAKp'));
console.log(hascontact(data.contacts,'asdfasdfasdfasdfa'));

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 2021-03-31
    • 2013-10-11
    • 1970-01-01
    • 2018-01-03
    相关资源
    最近更新 更多