JavaScript返回仅包含特定属性的父对象

3

Suppose I have an object like following:

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()...) - nnnnnn
2个回答

3

试试这个:

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');

1

我不知道如何编写一个像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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接