【问题标题】:Javascript return only parent object that contain a special propertyJavascript 仅返回包含特殊属性的父对象
【发布时间】:2012-04-28 09:59:49
【问题描述】:

假设我有一个像下面这样的对象:

var Obj = {
             a: {
                   name: 'X',
                   age: 'Y',
                   other: {
                             job: 'P',
                             location: {
                                          lat: XX.XXXX,
                                          lng: YY.YYYYY,
                                          .........
                                       }
                          }
                }
          };

我的目标:我需要一个方法来检查 key 的存在并返回其直接父对象以进行任何级别的嵌套。

示例如果我搜索lat,该方法将返回location 对象,如果我搜索job,它将返回other,依此类推。

请帮忙。 谢谢....

【问题讨论】:

  • 到目前为止你得到了什么? (提示:尝试使用 for..in 循环或 jQuery 的 $.each()... 的递归函数)

标签: javascript jquery javascript-objects


【解决方案1】:

试试这个:

function findObjectWithProperty(obj, term){
    if (typeof obj == 'object'
        && Object.prototype.toString.call(obj) !== '[object Array]'){
        for(var prop in obj){
            if (obj.hasOwnProperty(prop)){
                if (prop==term)
                    return obj;
                var result = findObjectWithProperty(obj[prop], term);
                if (result != null)
                    return result;
            }
        }
    }
    return null;
}

用途:

var location = findObjectWithProperty(Obj, 'lat');
var other = findObjectWithProperty(Obj, 'job');

【讨论】:

    【解决方案2】:

    我不知道要为这个问题编写一个通用函数,比如 c# 中的反射,但是这个函数可能会有所帮助,尽管不是通用的。

    //Object.
    var Obj = {
                 a: {
                       name: 'X',
                       age: 'Y',
                       other: {
                                 job: 'P',
                                 location: {
                                              lat: 31.88,
                                              lng: 71.88
    
                                           }
                              }
                    }
              };
    
    
    function getParentObject(key,obj){  
      switch(key){
        case "lat" || "lng":   return obj.a.other.location; break;
        //write other cases...
        default:return obj;
      }
    }
    
    
    //Call
    var lng = getParentObject("lat",Obj).lng;
    

    【讨论】:

      猜你喜欢
      • 2012-10-08
      • 2013-10-19
      相关资源
      最近更新 更多