我編寫了此函數來搜索並返回對象中深度屬性的值,並想知道是否有方法使用遞歸或類似的方法來使函數執行同樣的事情,但代碼少(可能要刪除最多五個屬性深度可以測試的限制)。返回深屬性的值(如果它們存在的話)
如果函數存在,該函數將返回一個較深的屬性值,否則返回undefined。
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;
}
您忘記了電話......否則,良好的工作 – dandavis
呀,只是抓住了這一點。謝謝。 :-) –
非常好。似乎適用於迄今爲止我測試過的所有情況。出色的工作,再加上它迫使我學習一些新的概念。 – esnm