Ottenere il nome della proprietà dell'oggetto


179

Mi chiedevo se in JavaScript ci fosse un modo per far passare un oggetto in questo modo.

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

Ma ottieni il nome di ogni proprietà in questo modo.

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

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

Grazie per l'aiuto che puoi offrire.



4
seperatedovrebbe essereseparate
Juan Mendes,

13
@JuanMendes Grazie, corretto. Caspita, questa domanda è un tuffo nel passato. Da allora ho fatto 'l' + new Array(1000).join('o') + 'ng'strada.
Olical

1
la risposta selezionata non è corretta, utilizzare il metodo Object.keys ().
Kevin Florida,

risposta selezionata e l'oggetto Object.keys () fanno cose diverse, quindi a seconda di ciò che si desidera, uno dei due potrebbe avere ragione.
Gabe Johnson,

Risposte:


163

Usa Object.keys ():

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

Object.keys() ti dà una matrice di nomi di proprietà appartenenti all'oggetto di input.


3
Più specificamente, Object.keys (obj) restituisce una matrice di nomi di proprietà, ovvero chiavi, appartenenti al passato in obj.
uno studente non ha un nome il

1
Addition, Object.keys () restituisce solo proprietà enumuable, Object.getOwnProperties () restituirà tutte le sue proprietà
bitfishxyz

192

i è il nome.

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

Quindi potresti fare:

seperateObj[i] = myObject[i];

1
È possibile accedere alle proprietà degli oggetti tramite la sintassi della parentesi. obj.prop1 è uguale a obj ['prop1'].
Josiah Ruddell,

5
Una buona pratica è usare HasOwnProperty quando si usa for..in
Bakudan

5
@Bakudan sa cosa intendi, ma un modo migliore per dirlo è che dovresti usare hasOwnPropertyse non vuoi proprietà ereditate. In questo modo non stai seguendo ciecamente alcune regole. È possibile che in alcuni casi si desideri esaminare le proprietà ereditate. Un altro modo per scorrere le proprietà di un oggetto è utilizzare Object.keys . Object.keys(obj).forEach(function(prop){ alert obj[prop]})
Juan Mendes,

@Juan Mendes Sì, intendevo il caso con proprietà ereditate. Sono costretto (purtroppo) a usare questo approccio, perché IE8 non supporta Object.keys ...
Bakudan,

17

Dichiarazione di non responsabilità Ho frainteso la domanda: "Posso sapere il nome della proprietà a cui era attaccato un oggetto", ma ho scelto di lasciare la risposta poiché alcune persone potrebbero finire qui durante la ricerca.


No, un oggetto potrebbe essere collegato a più proprietà, quindi non ha modo di conoscerne il nome.

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

Come si chiamerebbe obj?

Sei sicuro di non voler semplicemente 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])
}

@ChadSchouggins Quello che hai detto è vero, ma non è questa la domanda a cui sto rispondendo, perché sì, puoi passare in rassegna un oggetto e ottenere ogni nome di proprietà. Sto rispondendo a una domanda che potrebbe non essere ciò che l'OP intendeva, volevo solo chiarire che più proprietà potrebbero puntare allo stesso oggetto.
Juan Mendes,

7

puoi iterare facilmente negli oggetti

es: se l'oggetto è 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 
})

6

per l'accesso diretto a una proprietà oggetto per posizione ... generalmente utile per la proprietà [0] ... quindi contiene informazioni sull'ulteriore ... o in 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 ]

4

Oltre a "Object.keys (obj)", abbiamo un ciclo "for ... in" molto semplice - che scorre su enumerabili nomi di proprietà di un oggetto.

const obj = {"fName":"John","lName":"Doe"};

for (const key in obj) {
    //This will give key
      console.log(key);
    //This will give value
    console.log(obj[key]);
    
}


3

Per ottenere la proprietà dell'oggetto o la "chiave dell'array" o "indice dell'array" a seconda della lingua nativa ..... Utilizzare il metodo Object.keys ().

Importante, questo è compatibile solo con "Browser moderni":

Quindi, se il tuo oggetto viene chiamato, myObject ...

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

Walla! Funzionerà sicuramente con l'ultimo Firefox, ie11 e Chrome ...

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


2

IN ES5

Ad esempio, hai questo tipo di oggetto:

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 soluzione migliore al problema, ma è bene darti un'idea di come farlo.

Saluti.



0

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


0

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

0

Utilizzare la Object.keys()funzione per acquisire proprietà da un Object, e può aiutare a cercare proprietà per nome, ad esempio:

const Products = function(){
    this.Product = "Product A";
    this.Price = 9.99;
    this.Quantity = 112;
};

// Simple find function case insensitive
let findPropByName = function(data, propertyName){
 let props = [];
 Object.keys(data).forEach(element => {
    return props.push(element.toLowerCase());
  });
  console.log(props);
  let i = props.indexOf(propertyName.toLowerCase());

  if(i > -1){
    return props[i];
  }
  return false;
};

// calling the function
let products = new Products();
console.log(findPropByName(products, 'quantity'));

-1

Veloce e sporco:

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.