Получить свойство объекта javascript с помощью имени ключа в переменной

Скажем, у меня есть что-то подобное в javascripts:

var obj = {
  subObj : {}
};
var type = 'subObj';

Как я могу получить obj's subObj w/type? Например, я хотел бы сделать что-то вроде:

obj.(type);

Ответ 1

obj[type]

Вы используете нотные обозначения.

11.2.1 Аксессоры свойств

Доступ к свойствам осуществляется по имени, используя либо точечную нотацию:

MemberExpression . IdentifierName
CallExpression . IdentifierName

или обозначение скобки:

MemberExpression [ Expression ]
CallExpression [ Expression ]

Ответ 2

Вы можете рассматривать объекты, подобные ассоциативным массивам, в JavaScript, поэтому вы сможете получить доступ к внутреннему объекту, например:

var obj = {
    subObj : {}
};

var type = "subObj";
var subObj = obj[type];

Ответ 3

Если кто-то задавался вопросом, как получить доступ к дополнительным свойствам (динамически), я нашел способ для этого, если есть более простой способ, сообщите мне:

function getPropertyByKeyPath(targetObj, keyPath) { 
  var keys = keyPath.split('.');
  if(keys.length == 0) return undefined; 
  keys = keys.reverse();
  var subObject = targetObj;
  while(keys.length) {
   var k = keys.pop();
   if(!subObject.hasOwnProperty(k)) {
    return undefined;
   } else {
    subObject = subObject[k];
   }
 }
 return subObject;
}

Например:

      var o = {result : {info:{ version:1, comment: 'test'}}};
      var subObject = getPropertyByKeyPath(o, 'result.info');
      console.log(subObject);

приведет к:

{version: 1, comment: "test"} 

Ответ 4

obj[type]

не имеет никакого смысла - вы не получаете доступа к ТИПАМ, это простые свойства - можно получить доступ к ним через obj[keyName] или что-то подобное, но с использованием type крайне запутанно и верным признаком отсутствия понимания

Ответ 5

    var obj = {
      subObj : {}
    }
    var type = 'subObj';

    console.log(typeof obj.subObj); //will print "object"
    console.log(obj.subObj); //will print "{}"

    //You can add a new propery like this:
    obj.subObj.newProperty = 'hello';
    console.log(typeof obj.subObj.newProperty); //will print "string"
    console.log(obj.subObj.newProperty); //will print "hello"

    // you can also add new properties like this
    obj.subObj['newProperty'] = 5; // this is very useful if you have to add properties with names that use reserved words or that contain illegal characters.
    console.log(typeof obj.subObj.newProperty); //will print "number"
    console.log(obj.subObj.newProperty); //will print "5"

    //In the case where you're using reserved or illegal words you'l have to do this  
    obj.subObj['new/Property'] = 'cat'; // this is very useful if you have to add properties with names that use reserved words or that contain illegal characters.
    console.log(typeof obj.subObj['new/Property']); //will print "number"
    console.log(obj.subObj['new/Property]); //will print "5"

    // and add another property in  the chain:
    obj.subObj['new/PropertyGroup']={
'illegal/name':'value', 
acceptableName: 5, 
andotherObject:{},
'illegally&Named(object)':{} 
}