如何在不知道哪个群组的情况下获取e
的值,这意味着只使用obj
和e
?
也可以使用相同的方式获取a
。
由于
let obj:Object = {
a: 'value1',
b: 'value2',
group1: {
c: 'value3',
d: 'value4'
},
group2: {
e: 'value5',
f: 'value6'
}
};
答案 0 :(得分:4)
我会这样做:
function findValue(key, obj) {
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
if (i === key) {
return obj[i];
} else if (typeof(obj[i]) == "object") {
var value = findValue(key, obj[i]);
if (typeof(value) !== "undefined") { return value; }
}
}
}
}
findValue('a', obj);
//"value1"
findValue('e', obj);
//"value5"
答案 1 :(得分:2)
您可以使用Object.keys()迭代属性和Object.hasOwnProperty()来测试对象是否包含属性:
let key = Object.keys(obj)
.find(k => obj[k].hasOwnProperty('e'));
console.log(obj[key].e);
答案 2 :(得分:2)
返回虚假值的版本。
function find(key, object) {
var value;
Object.keys(object).some(function (k) {
if (key === k) {
value = object[k];
return true;
}
if (typeof object[k] === 'object') {
value = find(key, object[k]);
return value !== undefined;
}
});
return value;
}
var obj = { a: 'value1', b: 'value2', group1: { c: 'value3', d: 'value4' }, group2: { e: 'value5', f: 'value6' }, group3: { g: '', h: 0 } };
document.write(find('e', obj) + '<br>');
document.write(find('g', obj) + '<br>');
document.write(find('h', obj) + '<br>');
&#13;