2016-02-22 5 views
1

Как получить e значение, не зная, в какой группе, что означает использовать только obj и e?Как получить элемент дочернего объекта?

И также может использовать тот же способ, чтобы получить a.

Благодаря

let obj:Object = { 
    a: 'value1', 
    b: 'value2', 
    group1: { 
    c: 'value3', 
    d: 'value4' 
    }, 
    group2: { 
    e: 'value5', 
    f: 'value6' 
    } 
}; 
+0

Кроме уплощение объект, на самом деле нет никакого способа, чтобы сделать то, что вы просите. – ndugger

ответ

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" 
+0

Приятное использование рекурсии. – Rohit416

+0

удивительный !! он работает даже в группе группы группы и т. д., спасибо вам большое! –

+0

может возникнуть проблема с значениями false. –

2

Вы можете использовать Object.keys() для перебора свойств и Object.hasOwnProperty(), чтобы проверить, если объект содержит свойство:

let key = Object.keys(obj) 
       .find(k => obj[k].hasOwnProperty('e')); 

console.log(obj[key].e); 
+0

спасибо! существует ли универсальный способ? потому что теперь я не могу найти 'a',' console.log (obj [key] .a); ' –

+0

Это не является гибким для других уровней вложенности. – lintmouse

+0

@HongboMiao это работает только для 1 вложенного уровня, как вы изначально задавали. Ответ на dave работает хорошо также для вложенных объектов – madox2

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>');

+0

спасибо, @NinaScholz! –

Смежные вопросы