webentwicklung-frage-antwort-db.com.de

beste Weg, um den Schlüssel eines Key/Value-Javascript-Objekts zu erhalten

Wenn ich ein JS-Objekt habe wie:

var foo = { 'bar' : 'baz' }

Wenn ich weiß, dass foo diese grundlegende Schlüssel-/Wertstruktur hat, aber den Namen des Schlüssels nicht weiß, wie kann ich das am einfachsten herausfinden? for ... in? $.each()? Ich hoffe es gibt was besseres ....

134
sprugman

Wenn Sie alle Schlüssel erhalten möchten, wird mit ECMAScript 5 Object.keys eingeführt. Dies wird nur von neueren Browsern unterstützt, aber die MDC-Dokumentation bietet eine alternative Implementierung (die auch for...in btw verwendet):

if(!Object.keys) Object.keys = function(o){
     if (o !== Object(o))
          throw new TypeError('Object.keys called on non-object');
     var ret=[],p;
     for(p in o) if(Object.prototype.hasOwnProperty.call(o,p)) ret.Push(p);
     return ret;
}

Wenn Sie sowohl Schlüssel als auch Wert wünschen, ist for...in die einzig sinnvolle Lösung.

76
Felix Kling

Sie würden innerhalb des Objekts mit einer for-Schleife durchlaufen:

for(var i in foo){
  alert(i); // alerts key
  alert(foo[i]); //alerts key's value
}

Oder

Object.keys(foo)
  .forEach(function eachKey(key) { 
    alert(key); // alerts key 
    alert(foo[key]); // alerts value
  });
145
Michael Benin

Sie können auf jeden Schlüssel einzeln zugreifen, ohne zu iterieren wie in:

var obj = { first: 'someVal', second: 'otherVal' };
alert(Object.keys(obj)[0]); // returns first
alert(Object.keys(obj)[1]); // returns second
84
user01

Gegeben dein Objekt:

var foo = { 'bar' : 'baz' }

Um bar zu erhalten, benutze:

Object.keys(foo)[0]

Um baz zu erhalten, benutze:

foo[Object.keys(foo)[0]]

Ein einzelnes Objekt annehmen

44
Aryeh Beitz

Ich hatte das gleiche Problem und das hat funktioniert

//example of an Object
var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

//How to access a single key or value
var key = Object.keys(person)[0];
var value = person.firstName;
14
Chris
// iterate through key-value gracefully
const obj = { a: 5, b: 7, c: 9 };
for (const [key, value] of Object.entries(obj)) {
  console.log(`${key} ${value}`); // "a 5", "b 7", "c 9"
}

Siehe MDN 

8
aiffin

Ich sehe nichts anderes als for (var key in foo).

7
patapizza

Dies ist der einfachste und einfachste Weg. So machen wir das.

var obj = { 'bar' : 'baz' }
var key = Object.keys(obj)[0];
var value = obj[key];
     
 console.log("key = ", key) // bar
 console.log("value = ", value) // baz

7
Must Keem J

Ein one Liner für Sie:

const OBJECT = {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3',
    'key4': 'value4'
};

const value = 'value2';

const key = Object.keys(OBJECT)[Object.values(OBJECT).indexOf(value)];

window.console.log(key); // = key2
6
Theone Lucas

Am einfachsten ist es, Underscore.js zu verwenden:

Schlüssel

_.keys (Objekt) Rufen Sie alle Namen der Objekteigenschaften ab.

_.keys ({eins: 1, zwei: 2, drei: 3}); => ["Eins", "Zwei", "Drei"]

Ja, Sie benötigen eine zusätzliche Bibliothek, aber es ist so einfach!

4
samnau

Es gibt keinen anderen Weg als for ... in. Wenn Sie das nicht verwenden möchten (vielleicht, weil es geringfügig ineffizient ist, hasOwnProperty bei jeder Iteration testen zu müssen?), Dann verwenden Sie ein anderes Konstrukt, z. ein Array von kvp's:

[{ key: 'key', value: 'value'}, ...]
4
Jamie Treworgy

Da Sie $.each() erwähnt haben, ist hier ein praktischer Ansatz, der in jQuery 1.6+ funktionieren würde:

var foo = { key1: 'bar', key2: 'baz' };

// keys will be: ['key1', 'key2']
var keys = $.map(foo, function(item, key) {
  return key;
});
3
Dave Ward

Object.keys () Die Object.keys () - Methode gibt ein Array der eigenen aufzählbaren Eigenschaften eines Objekts in der gleichen Reihenfolge zurück, die von einer for ... in-Schleife angegeben wird (der Unterschied besteht darin) eine for-in-Schleife listet auch Eigenschaften in der Prototypkette auf.

var arr1 = Object.keys(obj);

Object.values ​​() Die Object.values ​​() - Methode gibt ein Array der eigenen aufzählbaren Eigenschaftswerte eines Objekts in der gleichen Reihenfolge zurück, die von einer for ... in-Schleife angegeben wird (der Unterschied ist dass eine For-in-Schleife auch Eigenschaften in der Prototypkette auflistet).

var arr2 = Object.values(obj);

Für mehr bitte hier hier

3
jesusverma

verwenden Sie für jede Schleife den Zugriff auf Schlüssel in Object oder Maps in Javascript

for(key in foo){
   console.log(key);//for key name in your case it will be bar
   console.log(foo[key]);// for key value in your case it will be baz
}

Hinweis: Sie können auch verwenden 

Object.keys (foo);

es wird Ihnen so geben Ausgabe:

[Bar];

2

Nun, $.each ist ein Bibliothekskonstrukt, wohingegen for ... in natives js ist, was besser sein sollte

1
Neal

zum Anzeigen als Zeichenfolge verwenden Sie einfach:

console.log("they are: " + JSON.stringify(foo));
0
Jiulong Zhao