Holen Sie sich alle Schlüssel eines JavaScript-Objekts

Lesezeit: 3 Minuten

Benutzeravatar von tishma
Tischma

Ich habe mich gefragt, ob es eine schnelle Möglichkeit gibt, Schlüssel eines assoziativen Arrays in ein Array oder eine durch Kommas getrennte Liste mit JavaScript zu extrahieren (jQuery ist in Ordnung).

options = {key1: "value1", key2: "value2"};

Das Ergebnis sollte das Array sein:

["key1", "key2"]

oder nur eine Zeichenfolge:

"key1, key2"

  • Ich glaube du meintest ["key1","key2"] nicht {"key1","key2"}

    – escarello

    9. Dezember 2010 um 15:48 Uhr


  • mögliches Duplikat von How to list the properties of a javascript object

    – Andi E

    9. Dezember 2010 um 16:04 Uhr

  • Es ist. Schade, dass Array dort nie erwähnt wird.

    – tischma

    9. Dezember 2010 um 16:20 Uhr

  • Das liegt daran, dass es in JavaScript kein assoziatives Array gibt. Was Sie ein assoziatives Array nennen, ist ein Objekt mit einer Liste von Eigenschaften (daher wie man die Eigenschaften eines Javascript-Objekts auflistet). Aus diesem Grund befindet sich die native Methode zum Auflisten der Schlüssel auch auf der Object Objekt – Object.keys().

    – Andi E

    9. Dezember 2010 um 16:39 Uhr


Sie können leicht ein Array davon über a erhalten for Schleife, zum Beispiel:

var keys = [];
for(var key in options) {
  if(options.hasOwnProperty(key)) { //to be safe
    keys.push(key);
  }
}

Dann benutze keys wie Sie möchten, zum Beispiel:

var keyString = keys.join(", ");

Hier können Sie es testen. Die .hasOwnProperty() check dient der Sicherheit, falls irgendjemand mit dem Objekt-Prototypen herumgespielt hat und so weiter.

Benutzeravatar von pwl
pwl

options = {key1: "value1", key2: "value2"};
keys = Object.keys(options);

  • Bitte beachten Sie, dass dies nicht von IE8 und niedriger unterstützt wird, derzeit 7,3 % der weltweiten Browser.

    – Michael Müller

    31. Januar 2014 um 9:38 Uhr

  • IE8 und darunter machen jetzt etwa 1 % der weltweiten Browser aus.

    – Stephen Ostermiller

    13. März 2016 um 10:37 Uhr


Ein jQuery-Weg, es zu tun:

var keys = [];
options = {key1: "value1", key2: "value2"};
$.each(options, function(key, value) { keys.push(key) })
console.log(keys)

  • Sie können auch Schlüssel verwenden[keys.length] = Schlüssel; um IE sicher zu sein

    – Ege Özcan

    9. Dezember 2010 um 15:48 Uhr


Benutzeravatar von Andy E
Andi E

Die meisten der großen Browser haben diese Funktionalität jetzt eingebaut, die Methode ist Object.keys():

var keys = Object.keys(options);
//-> ["key1", "key2"]

Sie können dies auch mit einem kleinen Ausschnitt in Browsern implementieren, die dies nicht unterstützen:

Object.keys = Object.keys || (function () {
    var hasOwnProperty = Object.prototype.hasOwnProperty;

    return function (o) {
        if (typeof o != "object" && typeof o != "function" || o === null)
            throw new TypeError("Object.keys called on a non-object");

        var result = [];
        for (var name in o) {
            if (hasOwnProperty.call(o, name))
                result.push(name);
        }

        return result;
    };
})();

Dieses Snippet funktioniert ähnlich wie das in Nick Cravers Beispiel, mit zwei Ausnahmen:

  • Es wird einen sinnvollen TypeError auslösen, wenn Sie etwas anderes als ein Objekt (oder ein “assoziatives Array”, wenn Sie möchten) übergeben.
  • Es wird ein lästiges DOM-bezogenes Problem in Internet Explorer umgehen, bei dem Sammlungen das nicht haben hasOwnProperty Methode.

Dies (und die anderen Antworten hier) umgehen jedoch keinen IE-Enumerationsfehler. Weitere Informationen und eine teilweise Umgehung dafür finden Sie in dieser Antwort hier.

Sie können jetzt verwenden

Object.keys(obj)

um ein Array zu erhalten, das aus den verfügbaren Schlüsseln in einem Objekt besteht. Mozilla verfügt über Nutzungs- und Verfügbarkeitsinformationen.

Benutzeravatar von Pointy
Spitz

Sie können verwenden $.each() in jQuery:

function keyArray(obj) {
  var rv = [];
  $.each(options, function(key) { rv.push(key); });
  return rv;
}

dann

var keys = keyArray(options);

gibt Ihnen ["key1", "key2"] als Array, was Sie könnten join um eine Schnur zu bekommen.

1438180cookie-checkHolen Sie sich alle Schlüssel eines JavaScript-Objekts

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy