【问题标题】:JavaScript get nested property without breaking [duplicate]JavaScript在不破坏的情况下获取嵌套属性[重复]
【发布时间】:2019-11-01 00:06:35
【问题描述】:

我收到一个深度嵌套的对象。我不知道会出现哪些属性。如果我想得到图像,我不能这样做

data.opposite.info.logo.images.s.resized_urls.s,

想象这来自一个用户可以将徽标留空的系统,然后我的代码就会中断。我需要检查这样的属性是否存在?

if(data.opposite){

   if(data.opposite.info)

     if(data.opposite.info.images)

//...etc
}

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    使用 javascript 的 try { ... } catch(e) { ... } 块。

    try { 
      url = data.opposite.info.logo.images.s.resized_urls.s; } 
    catch(e) { 
      url =  '' 
    }
    

    loadash.js 也有一个 get 方法可以帮助你解决这个问题

    var url = _.get(data, 'opposite.info.logo.images.s.resized_urls.s', '');
    

    如果路径存在,这将深入到对象中并返回's'。如果它不存在,它返回最后一个参数,在这种情况下是 ''。

    【讨论】:

    • 使用 lodash 是一个不错的选择,因为它只有一行。但我认为您在 _.get 的第一个参数中不需要 ''
    • 谢谢@JessieAnderson。更正了
    【解决方案2】:

    我正在尝试通过扫描对象获取价值:jsfiddle

    function getObjByProperty(obj, propertyName) {
      if (obj instanceof Object) {
        if (obj.hasOwnProperty(propertyName)) {
            return obj[propertyName];
        }
        for (var val in obj) {
            if (obj.hasOwnProperty(val)) {
                var result = getObjByProperty(obj[val], propertyName);
                if (result != null) {
                    return result;
                }
            }
        }
       } else {
        return null;
      }
     }
    
     var images = getObjByProperty(data, 'images');
     if (images) {      
      console.log(images);
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多