2017-03-16 14 views
11

Ich suche eine alternative Version für die Object.values() Funktion.
Als described here wird die Funktionen im Internet Explorer nicht unterstützt.Alternative Version für Object.values ​​()

Bei der Ausführung von dem folgenden Beispielcode:

var obj = { foo: 'bar', baz: 42 }; 
console.log(Object.values(obj)); // ['bar', 42] 

Es funktioniert in beide, Firefox und Chrome, sondern führt den folgenden Fehler in IE11:

Objekt nicht-Eigenschaft oder Methode " Werte "

Hier können Sie es testen: Fiddle.

Also, was wäre eine schnelle Lösung?

Antwort

33

Sie können Array von Schlüsseln mit Object.keys() erhalten und dann map() verwenden, um Werte zu erhalten.

var obj = { foo: 'bar', baz: 42 }; 
 
var values = Object.keys(obj).map(function(e) { 
 
    return obj[e] 
 
}) 
 

 
console.log(values)

Mit ES6 können Sie dies in einer Linie mit Pfeil-Funktionen schreiben.

var values = Object.keys(obj).map(e => obj[e]) 
+0

Sie haben mich dazu geschlagen. :) –

+0

champ. du hast meinen Tag gerettet! – Khaleel

+1

danke! Für meinen eckigen Code änderte ich 'objectValues ​​= Object.values;' in 'objectValues ​​= ((obj) => { return Objekt.Schlüssel (obj) .map (e => obj [e]); }) ; ' – Jeff

1

Sie können eine polyfill verwenden:

const valuesPolyfill = function values (object) { 
 
    return Object.keys(object).map(key => object[key]); 
 
}; 
 

 
const values = Object.values || valuesPolyfill; 
 

 
console.log(values({ a: 1, b: 2, c: 3 }));

4

Seit Objekt a (nicht so) kürzlich erfolgten Einführung, wenn Sie alle Browser unterstützen möchten (AKA IE8 und darunter), dann müssen Sie Ihre eigene Funktion erstellen:

function objectValues(obj) { 
    var res = []; 
    for (var i in obj) { 
     if (obj.hasOwnProperty(i)) { 
      res.push(obj[i]); 
     } 
    } 
    return res; 
} 

PS: Gerade bemerkte die ecmascript-6 Tag. Übrigens behalte ich diese Antwort hier, nur für den Fall, dass jemand es braucht.