web-dev-qa-db-fra.com

Obtenir le nom de la propriété de l'objet

Je me demandais s'il existait un moyen en JavaScript de parcourir en boucle un objet comme celui-ci.

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

Mais obtenez le nom de chaque propriété comme ceci.

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

Je n'arrive pas à trouver quoi que ce soit du genre sur Google. Ils disent de passer les noms des variables avec eux, mais ce n'est pas une option pour ce que j'essaie de réaliser.

Merci pour toute aide que vous pouvez offrir.

164
Olical

Utilisez Object.keys ():

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

Object.keys() vous donne un tableau de noms de propriétés appartenant à l'objet en entrée.

137
Trann

i est le nom.

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

Alors tu pourrais faire:

seperateObj[i] = myObject[i];
185
Josiah Ruddell

Disclaimer J'ai mal compris la question: "Puis-je connaître le nom de la propriété à laquelle un objet était attaché", mais j'ai choisi de laisser la réponse, car certaines personnes pourraient se retrouver ici en cherchant cela.


Non, un objet peut être attaché à plusieurs propriétés, il n'a donc aucun moyen de connaître son nom.

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

Quel serait le nom de obj?

Êtes-vous sûr de ne pas simplement vouloir le nom de la propriété dans la boucle for?

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

vous pouvez facilement itérer dans des objets

exemple: si l'objet est 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
Akhil Aravind

pour accéder directement à une propriété d'objet par position ... généralement utile pour la propriété [0] ... elle contient donc des informations sur la suite ... ou dans node.js 'require.cache [0]' pour le premier module externe chargé , etc.

Object.keys( myObject )[ 0 ]
Object.keys( myObject )[ 1 ]
...
Object.keys( myObject )[ n ]
4
ZEE

Pour obtenir la propriété de l'objet ou la "clé de tableau" ou "l'index de tableau" en fonction de votre langue maternelle, utilisez la méthode Object.keys ().

Important, ceci est uniquement compatible avec les "navigateurs modernes":

Donc, si votre objet s'appelle, myObject ...

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

Walla! Cela fonctionnera certainement dans les derniers firefox et ie11 et chrome ...

Voici de la documentation sur MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

3
Kevin Florida

EN ES5

PAR EXEMPLE. vous avez ce genre d'objet:

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

Et maintenant, si vous voulez avoir une fonction qui si vous passez "0" comme paramètre - pour obtenir "STEP_ELEMENT", si "2" pour obtenir "BLUE_ELEMENT" et ainsi de suite.

function(elementId) {
    var element = null;

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

    return element;
}

Ce n'est probablement pas la meilleure solution au problème, mais il est bon de vous donner une idée de la façon de le faire.

À votre santé.

2
Combine

À partir de 2018, vous pouvez utiliser Object.getOwnPropertyNames() comme décrit dans Documentation de Mozilla pour les développeurs

const object1 = {
  a: 1,
  b: 2,
  c: 3
};

console.log(Object.getOwnPropertyNames(object1));
// expected output: Array ["a", "b", "c"]
1
Aaqib

Ces solutions fonctionnent aussi.

// 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
ekbgh

Lorsque vous faites la boucle for/in que vous mettez en premier, i est le nom de la propriété. Donc, vous avez le nom de la propriété, i, et accédez à la valeur en faisant monObjet [i].

0
mmurch