Abrufen des Eigenschaftsnamens des Objekts


178

Ich habe mich gefragt, ob es in JavaScript eine Möglichkeit gibt, ein Objekt wie dieses zu durchlaufen.

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

Aber erhalten Sie den Namen jeder Eigenschaft wie folgt.

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

Ich kann so etwas bei Google anscheinend nicht finden. Sie sagen, dass sie die Namen der Variablen mit ihnen übergeben sollen, aber dies ist keine Option für das, was ich erreichen möchte.

Vielen Dank für jede Hilfe, die Sie anbieten können.



4
seperatesollte seinseparate
Juan Mendes

13
@ JuanMendes Danke, korrigiert. Wow, diese Frage ist eine Explosion aus der Vergangenheit. Ich bin 'l' + new Array(1000).join('o') + 'ng'seitdem einen Weg gegangen.
Olical

1
Die überprüfte Antwort ist falsch. Verwenden Sie die Object.keys () -Methode.
Kevin Florida

Die überprüfte Antwort und das Objekt Object.keys () bewirken unterschiedliche Aufgaben. Je nachdem, was Sie möchten, ist möglicherweise eine der beiden richtig.
Gabe Johnson

Antworten:


163

Verwenden Sie Object.keys ():

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

Object.keys() gibt Ihnen ein Array von Eigenschaftsnamen, die zum Eingabeobjekt gehören.


3
Insbesondere gibt Object.keys (obj) ein Array von Eigenschaftsnamen zurück, dh Schlüssel, die zu dem in obj übergebenen gehören.
Ein Lernender hat keinen Namen

1
Zusätzlich gibt Object.keys () nur aufzählbare Eigenschaften zurück, Object.getOwnProperties () gibt alle seine Eigenschaften zurück
bitfishxyz

191

i ist der Name.

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

So könnten Sie tun:

seperateObj[i] = myObject[i];

1
Auf Objekteigenschaften kann über die Klammernsyntax zugegriffen werden. obj.prop1 ist dasselbe wie obj ['prop1'].
Josiah Ruddell

5
Eine gute Praxis ist es, HasOwnProperty zu verwenden, wenn Sie für ... in
Bakudan

5
@ Bakudan wissen, was Sie meinen, aber ein besserer Weg, es auszudrücken, ist, dass Sie verwenden sollten, hasOwnPropertywenn Sie keine geerbten Eigenschaften wollen. Auf diese Weise folgen Sie nicht blind einer Regel. Es kann sein, dass Sie in einigen Fällen tatsächlich geerbte Eigenschaften betrachten möchten. Eine andere Möglichkeit, die eigenen Eigenschaften eines Objekts zu durchlaufen, ist die Verwendung von Object.keys . Object.keys(obj).forEach(function(prop){ alert obj[prop]})
Juan Mendes

@ Juan Mendes Ja, ich meinte den Fall mit geerbten Eigenschaften. Ich bin (leider) gezwungen, diesen Ansatz zu verwenden, da IE8 Object.keys nicht unterstützt ...
Bakudan

17

Haftungsausschluss Ich habe die Frage falsch verstanden: "Kann ich den Eigenschaftsnamen kennen, an den ein Objekt angehängt wurde?", Aber ich habe mich entschieden, die Antwort zu hinterlassen, da einige Leute möglicherweise hier landen, während sie danach suchen.


Nein, ein Objekt kann an mehrere Eigenschaften angehängt werden, sodass es seinen Namen nicht kennen kann.

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

Wie würde obj heißen?

Sind Sie sicher, dass Sie nicht nur den Eigenschaftsnamen aus der for-Schleife möchten?

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

@ChadSchouggins Was Sie gesagt haben, ist wahr, aber das ist nicht die Frage, die ich beantworte, denn ja, Sie können ein Objekt durchlaufen, um jeden Eigenschaftsnamen zu erhalten. Ich beantworte eine Frage, die möglicherweise nicht den Absichten des OP entspricht. Ich wollte nur klarstellen, dass mehrere Eigenschaften auf dasselbe Objekt verweisen können.
Juan Mendes

7

Sie können Objekte problemlos iterieren

zB: wenn das Objekt var a = {a: 'Apfel', b: 'Ball', c: 'Katze', d: 'Puppe', e: 'Elefant'} ist;

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

6

für den direkten Zugriff auf eine Objekteigenschaft nach Position ... im Allgemeinen nützlich für Eigenschaft [0] ... damit sie Informationen über die weiteren ... oder in node.js 'require.cache [0]' für das erste geladene externe Modul enthält usw. usw. usw.

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

4

Abgesehen von "Object.keys (obj)" haben wir eine sehr einfache "for ... in" -Schleife, die die aufzählbaren Eigenschaftsnamen eines Objekts durchläuft.

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

Verwenden Sie die Object.keys () -Methode, um die Eigenschaft des Objekts oder den "Array-Schlüssel" oder "Array-Index" abzurufen, je nachdem, welche Muttersprache Sie verwenden.

Wichtig, dies ist nur mit "modernen Browsern" kompatibel:

Wenn Ihr Objekt aufgerufen wird, wird myObject ...

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

Walla! Dies wird definitiv in der neuesten Firefox und dh11 und Chrom funktionieren ...

Hier finden Sie einige Dokumentationen unter MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys


2

IN ES5

EG Sie haben diese Art von Objekt:

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

Und jetzt, wenn Sie eine Funktion haben möchten, die, wenn Sie '0' als Parameter übergeben - um 'STEP_ELEMENT' zu erhalten, wenn '2', um 'BLUE_ELEMENT' zu erhalten und so weiter

function(elementId) {
    var element = null;

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

    return element;
}

Dies ist wahrscheinlich nicht die beste Lösung für das Problem, aber es ist gut, Ihnen eine Idee zu geben, wie es geht.

Prost.



0

Wenn Sie die for / in-Schleife ausführen, die Sie zuerst erstellt haben, ist i der Eigenschaftsname. Sie haben also den Eigenschaftsnamen i und greifen mit myObject [i] auf den Wert zu.


0

Diese Lösungen funktionieren auch.

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

Verwenden Sie die Object.keys()Funktion zum Erfassen von Eigenschaften von a Objectund helfen Sie dabei, Eigenschaften nach Namen zu suchen, zum Beispiel:

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

Schnell und schmutzig:

function getObjName(obj) {
  return (wrap={obj}) && eval('for(p in obj){p}') && (wrap=null);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.