Obtendo o nome da propriedade do object

Eu queria saber se havia alguma maneira em JavaScript para percorrer um object como esse.

for(var i in myObject) { // ... } 

Mas pegue o nome de cada propriedade assim.

 for(var i in myObject) { separateObj[myObject[i].name] = myObject[i]; } 

Não consigo encontrar nada parecido no Google. Eles dizem para passar os nomes das variables ​​com eles, mas isso não é uma opção para o que estou tentando alcançar.

Obrigado por qualquer ajuda que você possa oferecer.

Use Object.keys ():

 var myObject = { a: 'c', b: 'a', c: 'b' }; var keyNames = Object.keys(myObject); console.log(keyNames); // Outputs ["a","b","c"] 

i sou o nome.

 for(var name in obj) { alert(name); var value = obj[name]; alert(value); } 

Então você poderia fazer:

 seperateObj[i] = myObject[i]; 

Disclaimer Eu entendi mal a pergunta a ser: “Posso saber o nome da propriedade que um object foi anexado a”, mas optou por deixar a resposta, pois algumas pessoas podem acabar aqui enquanto procurava por isso.


Não, um object pode ser anexado a várias propriedades, por isso não tem como saber seu nome.

 var obj = {a:1}; var a = {x: obj, y: obj} 

Qual seria o nome de obj?

Tem certeza de que você não quer apenas o nome da propriedade do loop for?

 for (var propName in obj) { console.log("Iterating through prop with name", propName, " its value is ", obj[propName]) } 

Para obter a propriedade do object ou a “chave da matriz” ou “índice da matriz”, dependendo de qual é a sua língua nativa, use o método Object.keys ().

Importante, isso só é compatível com “Navegadores modernos”:

Então, se seu object é chamado, myObject …

 var c = 0; for(c in myObject) { console.log(Object.keys(myObject[c])); } 

Walla! Isso definitivamente funcionará no último firefox e ie11 e chrome …

Aqui está alguma documentação no MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

você pode facilmente iterar em objects

por exemplo: se o object é var a = {a: ‘maçã’, b: ‘bola’, c: ‘gato’, d: ‘boneca’, e: ‘elefante’};

 Object.keys(a).forEach(key => { console.log(key) // returns the keys in an object console.log(a[key]) // returns the appropriate value }) 

para access direto uma propriedade de object por posição … geralmente útil para propoerty [0] … então ele contém informações sobre o adicional … ou em node.js ‘require.cache [0]’ para o primeiro módulo externo carregado , etc etc.

Object.keys (myObject) [0] Object.keys (myObject) [1] … Object.keys (myObject) [n]

EM ES5

Por exemplo, você tem esse tipo de object:

 var ELEMENTS = { STEP_ELEMENT: { ID: "0", imageName: "el_0.png" }, GREEN_ELEMENT: { ID: "1", imageName: "el_1.png" }, BLUE_ELEMENT: { ID: "2", imageName: "el_2.png" }, ORANGE_ELEMENT: { ID: "3", imageName: "el_3.png" }, PURPLE_ELEMENT: { ID: "4", imageName: "el_4.png" }, YELLOW_ELEMENT: { ID: "5", imageName: "el_5.png" } }; 

E agora, se você quer ter uma function que, se você passar ‘0’ como um param – para obter ‘STEP_ELEMENT’, se ‘2’ para obter ‘BLUE_ELEMENT’ e assim por

 function(elementId) { var element = null; Object.keys(ELEMENTS).forEach(function(key) { if(ELEMENTS[key].ID === elementId.toString()){ element = key; return; } }); return element; } 

Esta provavelmente não é a melhor solução para o problema, mas é bom dar uma idéia de como fazê-lo.

Felicidades.

Quando você faz o loop for / in que você colocou primeiro, i é o nome da propriedade. Então você tem o nome da propriedade, i, e acessa o valor fazendo myObject [i].

Essas soluções funcionam também.

 // Solution One function removeProperty(obj, prop) { var bool; var keys = Object.keys(obj); for (var i = 0; i < keys.length; i++) { if (keys[i] === prop) { delete obj[prop]; bool = true; } } return Boolean(bool); } //Solution two function removeProperty(obj, prop) { var bool; if (obj.hasOwnProperty(prop)) { bool = true; delete obj[prop]; } return Boolean(bool); } 

A partir de 2018, Você pode fazer uso de Object.getOwnPropertyNames() conforme descrito em Documentação do desenvolvedor Mozilla

 const object1 = { a: 1, b: 2, c: 3 }; console.log(Object.getOwnPropertyNames(object1)); // expected output: Array ["a", "b", "c"] 

Rápido e sujo:

 function getObjName(obj) { return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null); }