2010-11-23 20 views
120

Ich habe mich gefragt, ob es in JavaScript eine Möglichkeit gibt, ein Objekt so zu durchlaufen.Abrufen des Eigenschaftsnamens des Objekts

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

Aber den Namen jeder Eigenschaft wie folgt erhalten.

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

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

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

+2

Duplizieren von http://stackoverflow.com/questions/85992/how-do-i-enumerate-the -properties-of-javascript-object – wajiw

+3

'seperate' sollte' seperate' sein –

+12

@JuanMendes Danke, korrigiert. Wow, diese Frage ist eine Explosion aus der Vergangenheit. Ich habe seither einen "l" + neuen Array (1000) .join ('o') + 'ng'' Weg. – Olical

Antwort

73

Verwenden Object.keys():

var keyNames = Object.keys(myObject); 
console.log(keyNames); 

Object.keys() gibt Ihnen eine Reihe von Eigenschaftsnamen zu dem Eingabeobjekt gehören.

+1

Genauer gesagt, Object.keys (obj) gibt ein Array von Eigenschaftsnamen zurück, d. H. Schlüssel, die zu dem übergebenen obj gehören. –

+0

Guter Punkt, geändert. – Trann

+0

Wenn Sie IE8 und darunter noch unterstützen müssen, müssen Sie das Polyfill verwenden, das im mozilla.org-Link enthalten ist, da 'Object.keys' IE9 und höher ist. –

175

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]; 
+2

Perfekt! Ich habe einfach angenommen, dass der Index mit Zahlen gemacht wird. Ich danke dir sehr! – Olical

+1

Objekteigenschaften können über die Klammer-Syntax aufgerufen werden. obj.prop1 ist dasselbe wie obj ['prop1']. –

+5

Eine gute Praxis ist die Verwendung von [HasOwnProperty] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/HasOwnProperty) bei der Verwendung von for..in – Bakudan

0

Wenn Sie das tun die für/in-Schleife Sie zuerst setzen, i ist der Name der Eigenschaft. Sie haben also den Eigenschaftsnamen i und greifen auf den Wert zu, indem Sie myObject [i] ausführen.

13

Haftungsausschluss ich falsch verstanden, die Frage zu sein: „Kann ich den Namen der Eigenschaft, dass ein Objekt befestigt war“, sondern entschied sich für die Antwort zu verlassen, da einige Leute hier können am Ende, während für die Suche.


Nein, ein Objekt kann an mehrere Eigenschaften angehängt werden, so dass es seinen Namen nicht kennt.

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

Wie wäre der Name von obj?

Sind Sie sicher, dass Sie nicht nur den Namen der Eigenschaft aus der for-Schleife wollen?

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

Was sagst du zu nein? Es ist keine Ja/Nein-Frage. – Lee

+9

"Hey, ich habe mich gefragt, ob es eine Möglichkeit in JavaScript gibt, ein Objekt zu durchlaufen". Das ist sicherlich eine Ja/Nein-Frage. –

+0

@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 das ist, was das OP beabsichtigt hat. Ich wollte nur klarstellen, dass mehrere Eigenschaften auf dasselbe Objekt zeigen können. –

2

für den direkten Zugriff auf eine Objekteigenschaft von Position ... usefull allgemein für propoerty [0] ... so ist es hält Informationen über den weiteren ... oder in node.js 'require.cache [0]' für die erste geladene externe Modul, etc. etc.

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

3

Um die Eigenschaft des Objekts oder den "Array-Schlüssel" oder "Array-Index" abhängig von Ihrer Muttersprache zu erhalten ..... Verwenden Sie die Methode Object.keys().

Wichtig, dies ist nur kompatibel mit „Modernem Browser“:

Also, wenn Ihr Objekt aufgerufen wird, myObject ...

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

Walla! Dies funktioniert auf jeden Fall in der aktuellen Firefox und IE11 und Chrom ...

Hier einige Dokumentation bei MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

-1

Schnell & schmutzig:

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

IN ES5

Z.B. 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, dass eine Funktion haben wollen, wenn Sie ‚0‘ als param passieren - ‚STEP_ELEMENT‘ zu bekommen, wenn ‚2‘ zu bekommen ‚BLUE_ELEMENT‘ und so für

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, um Ihnen eine Vorstellung davon, wie es zu tun.

Prost.

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

Ab 2018 können Sie den Einsatz von Object.getOwnPropertyNames() machen wie in Developer Mozilla Documentation

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

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