2016-05-28 3 views
0

Я использую Meteor с MongoDB и не могу понять, как получить доступ к одному полю из объектов массива объектов.Доступ к одному полю из объекта в массиве

Мои документы:

{ 
    "_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.

Просто нужно какое-то направление, как получить доступ к полю массива объектов. Благодаря!

+4

'findMe.contacts' является массивом, он не имеет свойство' who' , для доступа к одному из элементов массива вам необходимо указать индекс: 'findMe.contacts [0] .who' –

+0

Это имеет смысл. Я попробовал это, но, увидев твой, я понял, что мой синтаксис ошибочен. Итак, как я могу проверить все объекты для строки в поле 'who'? Выполнение чего-то типа «подсчет» по количеству объектов, выполняющих цикл через каждый, кажется больше работой, чем необходимо, но я мог ошибаться. – gkrizek

+0

Вы не можете проверить каждый элемент, не проверяя каждый элемент :-) Кроме того, с небольшим количеством редактирования вы могли бы иметь [минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve). – 1983

ответ

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'));

Смежные вопросы