Ottenere il nome della proprietà dell’object

Mi stavo chiedendo se c’era un modo in JavaScript per scorrere un object in questo modo.

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

Ma prendi il nome di ogni proprietà come questa.

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

Non riesco a trovare nulla di simile su Google. Dicono di passare con loro i nomi delle variabili ma questa non è un’opzione per quello che sto cercando di ottenere.

Grazie per l’aiuto che puoi offrire.

Usa Object.keys ():

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

i sono il nome

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

Quindi potresti fare:

 seperateObj[i] = myObject[i]; 

Disclaimer Ho frainteso la domanda di essere: “Posso conoscere il nome della proprietà a cui è stato assegnato un object”, ma ho scelto di lasciare la risposta poiché alcune persone potrebbero finire qui mentre la cercano.


No, un object può essere associato a più proprietà, quindi non ha modo di conoscerne il nome.

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

Quale sarebbe il nome di obj?

Sei sicuro di non voler solo il nome della proprietà dal ciclo for?

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

Per ottenere la proprietà dell’object o la “chiave dell’array” o “indice dell’array” a seconda di quale sia la tua lingua madre ….. Usa il metodo Object.keys ().

Importante, questo è compatibile solo con “Browser moderni”:

Quindi se il tuo object è chiamato, myObject …

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

Walla! Questo funzionerà sicuramente nell’ultimo firefox e ie11 e chrome …

Ecco alcuni documenti su MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

puoi facilmente iterare negli oggetti

es .: se l’object è var a = {a: ‘apple’, b: ‘ball’, c: ‘cat’, d: ‘doll’, e: ‘elephant’};

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

per l’accesso diretto una proprietà dell’object per posizione … generalmente utile per propoerty [0] … quindi contiene informazioni sull’ulteriore … o su node.js ‘require.cache [0]’ per il primo modulo esterno caricato ecc. ecc.

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

IN ES5

Ad esempio, hai questo tipo di 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 ora se vuoi avere una funzione che se passi ‘0’ come parametro – per ottenere ‘STEP_ELEMENT’, se ‘2’ per ottenere ‘BLUE_ELEMENT’ e così per

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

Questa probabilmente non è la migliore soluzione al problema, ma è utile darti un’idea di come farlo.

Saluti.

Quando esegui il ciclo for / in per primo, i è il nome della proprietà. Quindi hai il nome della proprietà, io, e accedi al valore facendo myObject [i].

Anche queste soluzioni funzionano.

 // 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 partire dal 2018, puoi utilizzare Object.getOwnPropertyNames() come descritto in Developer Mozilla Documentation

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

Veloce e sporco:

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