为什么我不能总是得到d的值? 我想在更深的对象中获取指定节点的值,该对象可以是字符串,数字或复杂的对象。
var a = {
a: 1,
b: {
c: {
f: 3
},
d: 2
}
}
function fun(foo, key) {
for (var f in foo) {
if (f == key) {
return foo[f];
} else {
fun(foo[f], key)
}
}
}
console.log(fun(a, 'd'));
答案 0 :(得分:0)
如果该密钥存在于您要检查的对象中,请直接将其返回。 否则,浏览每个属性以查看其是否包含该属性。找到值后,立即将其返回。
请注意:如果您有两个具有相同键的嵌套属性,它将仅使您获得第一个。自动发现并非不可思议。
var a = {
a: 1,
b: {
c: {
f: 3
},
d: 2
}
}
function fun(obj, key) {
if(obj[key]) return obj[key];
for (var prop in obj) {
var result = fun(obj[prop], key);
if(result) return result;
}
}
console.log(fun(a, 'd'));
答案 1 :(得分:0)
问题出在您的算法上。当键匹配但函数堆栈没有将该值传播到console.log
函数时,它将返回正确的值。
尝试以正确传播值的方式更新函数。一个例子如下:
var a = { a: 1, b: { c: { f: 3 }, d: 2 } }
function fun(foo, key) {
let x = undefined;
for (var f in foo) {
if (f == key) {
x = foo[f];
} else {
x = fun(foo[f], key)
}
}
return x;
}
console.log(fun(a, 'd'));