角1.4.8/lodash解析对象的数组使用条件参数

问题描述:

DEV TOOLS角1.4.8/lodash解析对象的数组使用条件参数

  • 角1.4.8,lodash 4.0

最终溶液

建筑断Derek的代码贡献如下。不得不调整为_.property()或_.map()与_.find链产生解析不确定时异常:

  var getProfileImage = function(images) { 
       var defaultPath = 'images/profile/darthvader.jpg'; 
       if(!images || !images.length) return defaultPath; 

       if (images) { 
        thumbnail = _.find(images, {type: 10}); 
        return thumbnail ? _.has(thumbnail, 'data_url') ? thumbnail.data_url : defaultPath: defaultPath; 
       } 
      }, 

目的

我敢肯定,这是一个小白问题,因为我是新来的JS,并提前道歉,如果它明显。以下是解析图像以查找配置文件图像的方法。如果图像存在,则提取'data_url'属性。如果图像或图像类型可能不存在,请使用通用路径替换。注意这个方法有效,但看起来很冗长。

问题

使用上述工具是有一个更简洁的方式来达到同样的效果?

(阿里纳斯)我已经尝试使用lodash chain()_.pluck()一起,但我不断收到一个类型的错误,我怀疑是结果,如果发现或过滤器会返回一个未定义

TypeError: chain() ..._.pluck is not a function

数据例子(简化):

$images = [ 
{id: 1, 
type: 10, 
data_url: base64string 
}, 
{id: 2, 
type: 11, // note: not equal 
data_url: base64string 
} 
]; 
以上 方法提到

方法是从指令模板调用下面的代码。为简洁起见移除了指令代码:

"<img class='thumbnail__image' ng-src='{[{conversation.getImage(comment.profile.images)}]}'/>, 

方法

var getProfileImage = function(images) { 
     var thumbnail = null; 
     var path = 'images/profile/generic-thumbnail.png'; 

     if (images) { 
      thumbnail = _.find(images, function(image) { 
       return image.type === 10; 
      }); 
      if (_.isUndefined(thumbnail)) { 
       thumbnail = path; 
      } else if (_.has(thumbnail, 'data_url')) { 
       thumbnail = thumbnail.data_url'; 
      } 
      return thumbnail; 
     } 
    }; 
+0

将有助于有关于在何处以及如何被使用和更多的上下文基本的数据结构是什么 – charlietfl

这个问题会更适合https://codereview.stackexchange.com/

但这里是你如何能清理你的代码的例子:

var getProfileImage = function(images) { 
    var defaultPath = 'images/profile/generic-thumbnail.png'; 

    if(!images || !images.length) return defaultPath; 

    var thumbnailPath = _(images) 
     .find({ type: 10 }) 
     .map('data_url') 
     .value(); 

    return thumbnailPath ? thumbnailPath : defaultPath; 
}; 

_.pluck肯定会令你的代码更简洁,但它已经从lodash4.0.0删除:lodash 4.0.0 changelog

您现在可以使用_.map代替_.pluck