如何获取子对象的元素?

时间:2016-02-22 17:47:19

标签: javascript typescript ecmascript-6

如何在不知道哪个群组的情况下获取e的值,这意味着只使用obje

也可以使用相同的方式获取a

由于

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

3 个答案:

答案 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;
&#13;
&#13;