我编写这个函数是为了搜索并返回对象中深层属性的值,并且想知道是否有一种方法可以使用递归或类似的方法来使函数执行相同的操作但代码更少(并且可能会消除最多可测试五个属性深度的限制)。
如果存在,该函数将返回一个深层属性值,否则返回未定义。
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;
}
最佳答案
.reduce
对此很有用。
演示: http://jsfiddle.net/NU4vF/2
function getDeep() {
return [].reduce.call(arguments, function(obj, prop) {
return obj && obj[prop];
});
}
关于javascript - 返回深层属性的值(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870547/