我正在尝试从数组内的对象中获取_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
。
我们非常感谢您的帮助。
答案 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;
}, []);