Читать объект в массиве в nodejs - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь получить _id от объектов в массиве.

[ { _id: 5ba49c6304daff5034e6fa6a,
    email: 'editor@gmail.com',
    active: true,
    events: [ [Object], [Object], [Object] ],
    name: { first: 'editor', last: 'editor' } } ]

Каждый объект в массиве событий содержит _id.Мне нужно получить эти идентификаторы в другом массиве.

if (userobj.events) {
   if (userobj.events[0]) {
         var eIds = [];
         for (var i = 0; i<userobj.events.length; i++) {
             console.log(userobj.events._id);
             eIds.push(userobj.events._id);
         }
             andArr.push({"_id":{"$in":eIds}});
      }
  }

Я получаю undefined для каждого _id.

Любая помощь высоко ценится.

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

userobj ={ 
  _id: '5ba',
  email: 'editor@gmail.com',
  active: true,
  events: [ {_id:23},{_id:34},{_id:56},{}],
}

let listOfId = [];
userobj.events.map(({_id})=> { if(_id) listOfId.push(_id) });
console.log("listOfId",listOfId);
0 голосов
/ 21 сентября 2018

Я бы хотел улучшить ваше решение.Сначала вы проверяете на ноль.Затем вы отправляете идентификаторы в массив.Здесь вы можете использовать некоторые трюки JS и функции стрелок, подобные этой;

let obj = { events: [ {_id: 1}, {_id: 2}, {_id: 3}] };

let eventIds = (obj.events || []).map(event => event._id);

console.log(eventIds);

Кроме того, вы можете использовать ES6 для деструктурирования, как показывает Мухаммед;

let eventIds = (obj.events || []).reduce((acc, elem) => {
    if(elem._id) {
       acc.push(elem._id);
    }
    return acc;
}, []);
0 голосов
/ 21 сентября 2018

Вы пропускаете [i] после событий и до ._ id в цикле for.

userobj.events[i]._id

Это весь ваш код в одной строке:

let eIds = userobj.events.map(ele=>ele._id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...