it-swarm-pt.tech

Obter propriedade do objeto javascript via nome da chave na variável

Digamos que eu tenha algo parecido com isto em javascript:

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

Como posso obter obj'ssubObj c/type? Por exemplo, eu gostaria de fazer algo como:

obj.(type);
15
Kyle Decot

obj[type]

Você usa notação subscrita.

11.2.1 Acessadores de propriedades

As propriedades são acessadas pelo nome, usando a notação de ponto:

MemberExpression . IdentifierName
CallExpression . IdentifierName

ou a notação de colchete:

MemberExpression [ Expression ]
CallExpression [ Expression ]
33
Raynos

Você pode tratar objetos como matrizes associativas em JavaScript, para poder acessar o objeto interno como:

var obj = {
    subObj : {}
};

var type = "subObj";
var subObj = obj[type];
5
Jon Newmuis

Caso alguém esteja se perguntando como acessar subpropriedades (dinamicamente), eu encontrei uma maneira de fazer isso; se houver uma maneira mais fácil, informe-me:

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;
}

Por exemplo, isto:

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

resultaria em:

{version: 1, comment: "test"} 
2
Balance
obj[type]

não faz nenhum sentido - você não está acessando TIPOS, essas são propriedades simples - é possível acessá-las via obj[keyName] ou algo semelhante, mas usar type é extremamente confuso e um sinal claro de falta de entendimento

0
name