【问题标题】:Cannot get value of property based on property name using _.map无法使用 _.map 根据属性名称获取属性值
【发布时间】:2017-03-20 13:29:15
【问题描述】:

我有一个使用 MongoDB 作为数据库的应用程序,我很难从数组变量中提取属性值。我使用_.forEach 检查他们是否有数据并返回正数,但是当我尝试根据他们的属性名称获取值时,我得到了undefined

这是我的 MongoDB 模型:

/* Passport tab schema */
passportInfo: {
    passportDetails: []
},

/* Visa tab schema */
visaInfo: {
    visaDetails: []
},

调用 console.log 显示我的passportInfo 不为空:

[ { passportExpiry: '2017-03-02T16:00:00.000Z',
    passportNumber: { '0': 'AS1234567' },
    countryOfOrigin: { '0': 'Country Name' } } ]

这是我尝试提取值的方式:

    _.forEach(results, function (item) {
        console.log(item.passportInfo);

        var temp = _.map(item.passportInfo, "passportExpiry");
        console.log(temp);

但是在我运行这个之后,temp 返回了undefined

我做错了什么?

任何答案将不胜感激。

谢谢。

【问题讨论】:

  • 数组没有任何名为“passportInfo”的属性
  • 您介意使用 fiddle/plnkr/jsbin 创建最小的工作副本吗?
  • 这是我尝试用相同的对象结构做的一个简单的 plunker:plnkr.co/edit/TYfMhJhnZ0jsdMlDFtke?p=preview

标签: javascript angularjs lodash


【解决方案1】:

函数_.map 的原型正在等待集合作为第一个参数,但在您的情况下,字段passportInfo 是一个对象。您需要将passportDetails 数组传递给_.map。这是一个简单的方法:

    _.flatMap(results, function(item){
   return _.map(item.passportInfo.passPortDetails, function(n) {
       return n.passportExpiry;
   });
});

[更新] 上一个答案有误。已更正。由于您使用的是旧版本的lodash,而不是flatMap,因此请像这样使用flatten 函数:

    _.flatten(results, (item) => {
   return _.map(item.passportInfo.passPortDetails, (n) => {
     return n.passportExpiry;
   });
})

【讨论】:

  • 我不能使用_.flatMap,因为我的lodash版本只有3.10.1。我可以省略那部分吗?
  • 您可以升级您的 Iodash 版本或使用 flatten 功能。
猜你喜欢
  • 2011-07-27
  • 2023-03-07
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多