我正在尝试构建一个函数,该函数将在对象的所有嵌套中查找给定的属性键,然后返回给定,找到的键的值。
有数据集:
let data = {
'Test123': {
'Another Test': {},
'Test some more': {
'Still testing?': {
'Yeah...': {}
},
'Never ending story': {}
}
},
'Leeeeeeeeeeeroy!' : {
'Jenkins': {}
}
};
有一个功能:
function findProperty (keyUnknown, dataPile) {
let found;
for (const [key, value] of Object.entries(dataPile)) {
if (keyUnknown === key) {
found = value;
break;
} else {
found = findProperty(keyUnknown, value);
}
}
return found;
}
let questionsToRender = findProperty(key, data);
给出找到“ Test more more”的键,函数返回未定义的值,有人可以看看吗?我已经坚持了很多次。
答案 0 :(得分:1)
您只需要检查found
是否未定义或处于其他情况。
let data = {"Test123":{"Another Test":{},"Test some more":{"Still testing?":{"Yeah...":{}},"Never ending story":{}}},"Leeeeeeeeeeeroy!":{"Jenkins":{}}}
function findProperty(keyUnknown, dataPile) {
let found;
for (const [key, value] of Object.entries(dataPile)) {
if (keyUnknown === key) {
found = value;
break;
} else if (!found) {
found = findProperty(keyUnknown, value);
}
}
return found;
}
let questionsToRender = findProperty('Test some more', data);
console.log(questionsToRender)
答案 1 :(得分:0)
除了缺少支票,您还可以采用更紧凑的方法,并在找到后尽早返回。
function find(key, object) {
var value;
if (!object || typeof object !== 'object') return;
if (key in object) return object[key];
Object.values(object).some(v => value = find(key, v));
return value;
}
let data = { Test123: { 'Another Test': {}, 'Test some more': { 'Still testing?': { 'Yeah...': {} }, 'Never ending story': {} } }, 'Leeeeeeeeeeeroy!' : { Jenkins: {} } };
console.log(find('Still testing?', data));