Javascript lodash:从对象数组中获取对象值

Javascript lodash:从对象数组中获取对象值,javascript,lodash,Javascript,Lodash,我有一个如下所示的对象数组。数组中的每个对象都有一个讲师字段,该字段也是一个数组。如何通过lodash从该对象数组获取所有电子邮件字段 我需要使用双映射函数吗?我可以在对象中运行一个foreach,然后在讲师中运行另一个foreach,但我认为这不是很优雅。我无法从包含其他数组字段的对象数组中获取值。任何帮助都将不胜感激 [ { 'title': 'New Class', 'instructors': [ { 'email': 'somee

我有一个如下所示的对象数组。数组中的每个对象都有一个
讲师
字段,该字段也是一个数组。如何通过lodash从该对象数组获取所有电子邮件字段

我需要使用双映射函数吗?我可以在对象中运行一个foreach,然后在讲师中运行另一个foreach,但我认为这不是很优雅。我无法从包含其他数组字段的对象数组中获取值。任何帮助都将不胜感激

[
{
    'title': 'New Class',
    'instructors': [
        {
            'email': 'someemail@gmail.com'
        },
        {
            'email': 'anotheremail@gmail.com'
        }    
    ]
},
{
    'title': 'New Class 2',
    'instructors': [
        {
            'email': 'someemail@gmail.com'
        },
        {
            'email': 'anotheremail@gmail.com'
        }    
    ]
}    
])

这应该有效:

var allEmails = [];

_.each(myArray, function(obj) {
  _.each(obj.instructors, function(instructor) {
    allEmails.push(instructor.email);
  }, this);
}, this);

return allEmails;

使用
.reduce
.map
的更优雅的解决方案是:

_.reduce(myArray, function(result, value, key) {
    return result.concat(_.map(value.instructors, 'email'));
}, []);

编辑:
.pluck
由于v4.x已不推荐使用,请改用
.map

这应该可以:

var allEmails = [];

_.each(myArray, function(obj) {
  _.each(obj.instructors, function(instructor) {
    allEmails.push(instructor.email);
  }, this);
}, this);

return allEmails;

使用
.reduce
.map
的更优雅的解决方案是:

_.reduce(myArray, function(result, value, key) {
    return result.concat(_.map(value.instructors, 'email'));
}, []);

编辑:
.pluck
由于v4.x已不推荐使用,请改用
\uuu0.map

我需要使用双映射函数吗

这是一个解决方案。您认为您正在寻找:

var类=[{
“标题”:“新类”,
‘导师’:[{
“电子邮件”:someemail@gmail.com'
}, {
“电子邮件”:anotheremail@gmail.com'
}]
}, {
“标题”:“新类别2”,
‘导师’:[{
“电子邮件”:someemail@gmail.com'
}, {
“电子邮件”:anotheremail@gmail.com'
}]
}];
var emails=uu.flatMap(类、函数(cls)){
返回地图(cls.instructors,“电子邮件”);
});
document.querySelector('#out').innerHTML=JSON.stringify(emails,null,4)

我需要使用双映射函数吗

这是一个解决方案。您认为您正在寻找:

var类=[{
“标题”:“新类”,
‘导师’:[{
“电子邮件”:someemail@gmail.com'
}, {
“电子邮件”:anotheremail@gmail.com'
}]
}, {
“标题”:“新类别2”,
‘导师’:[{
“电子邮件”:someemail@gmail.com'
}, {
“电子邮件”:anotheremail@gmail.com'
}]
}];
var emails=uu.flatMap(类、函数(cls)){
返回地图(cls.instructors,“电子邮件”);
});
document.querySelector('#out').innerHTML=JSON.stringify(emails,null,4)

所以你知道,普通方法也很简单:

var out = arr.reduce(function (p, c) {
  return p.concat(c.instructors.map(function (instructor) {
    return instructor.email;
  }));
}, []);

所以你知道,普通的方法也很简单:

var out = arr.reduce(function (p, c) {
  return p.concat(c.instructors.map(function (instructor) {
    return instructor.email;
  }));
}, []);

很好的解决方案,我们经常使用lodash方法,而不考虑本地,直到IE9@deKajoo,我想你的意思是“来自IE9”:)很好的解决方案,我们过度使用lodash的方式,往往没有考虑本地的、兼容的,直到IE9@deKajoo,我想你的意思是“来自IE9”: