假设我有一个如下对象:
var Obj = {
a: {
name: 'X',
age: 'Y',
other: {
job: 'P',
location: {
lat: XX.XXXX,
lng: YY.YYYYY,
.........
}
}
}
};
我的目标:我需要一个检查key
是否存在的方法,并为任何级别的嵌套返回其直接父对象。
示例如果我搜索lat
该方法将返回location
个对象,如果我搜索job
,它将返回other
,因此上。
请帮忙。 感谢....
答案 0 :(得分: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 :(得分:1)
我不知道为c#中的Reflection这样的问题编写泛型函数,但是这个函数虽然不是通用的,但可能会有所帮助。
//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;