4 Stimmen

Iteration der Eigenschaften eines Objekts

Gibt es eine Möglichkeit, ein Objekt Eigenschaften und Methoden zu iterieren. Ich muss eine Utility-Funktion wie so zu schreiben:

function iterate(obj)
{
    //print all obj properties     
    //print all obj methods
}

also die Ausführung dieser Funktion:

iterate(String);

wird gedruckt:

property: lenght
function: charAt
function: concat...

Irgendwelche Ideen?

13voto

sixthgear Punkte 6100

So einfach sollte das sein:

function iterate(obj) {
    for (p in obj) {
        console.log(typeof(obj[p]), p);
    }
}

Anmerkung: Die console.log Funktion wird davon ausgegangen, dass Sie die Feuerteufel . Zu diesem Zeitpunkt ist Folgendes zu beachten:

obj = {
    p1: 1, 
    p2: "two",
    m1: function() {}
};

iterate(obj);

zurückkehren würde:

number p1
string p2
function m1

6voto

Peter Bailey Punkte 103278

Siehe meine Antwort in diese andere Frage aber Sie können die eingebauten Eigenschaften nicht auf diese Weise lesen.

3voto

Matthew Crumley Punkte 98564

Dies funktioniert nur in modernen Browsern (Chrome, Firefox 4+, IE9+), aber in ECMAScript 5 können Sie alle Eigenschaften eines Objekts mit Object.getOwnPropertyNames . Es ist nur ein wenig zusätzlicher Code erforderlich, um die geerbten Eigenschaften aus dem Prototyp zu erhalten.

// Put all the properties of an object (including inherited properties) into
// an object so they can be iterated over
function getProperties(obj, properties) {
    properties = properties || {};

    // Get the prototype's properties
    var prototype = Object.getPrototypeOf(obj);
    if (prototype !== null) {
        getProperties(prototype, properties);
    }

    // Get obj's own properties
    var names = Object.getOwnPropertyNames(obj);
    for (var i = 0; i < names.length; i++) {
        var name = names[i];
        properties[name] = obj[name];
    }

    return properties;
}

function iterate(obj) {
    obj = Object(obj);

    var properties = getProperties(obj);

    for (var name in properties) {
        if (typeof properties[name] !== "function") {
            console.log("property: " + name);
        }
    }
    for (var name in properties) {
        if (typeof properties[name] === "function") {
            console.log("function: " + name);
        }
    }
}

0voto

Michael Punkte 276

Sie können die for-Schleife verwenden, um die Eigenschaften eines Objekts zu iterieren.

Hier ein einfaches Beispiel

var o ={'test':'test', 'blah':'blah'};

for(var p in o)
    alert(p);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X