【发布时间】:2014-03-19 04:43:18
【问题描述】:
我编写了这个函数来搜索并返回对象中深层属性的值,并且想知道是否有一种方法可以使用递归或类似的方法来使函数执行相同的操作但代码更少(并且可能会取消最多五个可以测试的深度属性的限制。
如果存在,该函数将返回一个深度属性值,否则返回未定义。
function getDeep(o, p2, p3, p4, p5) {
if (p5 !== undefined) {
if (o.hasOwnProperty(p2) && o[p2].hasOwnProperty(p3) && o[p2][p3].hasOwnProperty(p4) && o[p2][p3][p4].hasOwnProperty(p5)) {
return o[p2][p3][p4][p5];
}
} else if (p4 !== undefined) {
if (o.hasOwnProperty(p2) && o[p2].hasOwnProperty(p3) && o[p2][p3].hasOwnProperty(p4)) {
return o[p2][p3][p4];
}
} else if (p3 !== undefined) {
if (o.hasOwnProperty(p2) && o[p2].hasOwnProperty(p3)) {
return o[p2][p3];
}
} else if (p2 !== undefined) {
if (o.hasOwnProperty(p2)) {
return o[p2];
}
} else if (o !== undefined) {
return o;
}
}
window.onload = function () {
var obj = {a:{b:{c:1}}};
window.console.log(getDeep(obj, 'a', 'b', 'c')); // returns 1;
window.console.log(getDeep(obj, 'a', 'b', 'd')); // returns undefined;
}
【问题讨论】:
标签: javascript function object return