在Node.js中读取数组内的对象

时间:2018-09-21 15:48:37

标签: arrays node.js object

我正在尝试从数组内的对象中获取_id

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

事件数组中的每个对象都包含一个_id。我需要在另一个数组中获取这些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}});
      }
  }

每个_id我都得到undefined

我们非常感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

在for循环中,在事件之后和 ._ id 之前,您缺少[i]。

userobj.events[i]._id

这是一行中的全部代码:

let eIds = userobj.events.map(ele=>ele._id)

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我想改善您的解决方案。首先,您要检查是否为空。然后,您将id推送到数组。在这里,您可以使用一些JS技巧和箭头函数;

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

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

console.log(eventIds);

此外,您可以使用Muhammad展示的ES6销毁功能;

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

顺便说一句,您可以使用reduce。

let eventIds = (obj.events || []).reduce((acc, elem) => {
    if(elem._id) {
       acc.push(elem._id);
    }
    return acc;
}, []);