Ich suche eine alternative Version für die Object.values()
Funktion.
Wie hier beschrieben, wird die Funktion im Internet Explorer nicht unterstützt.
Bei der Ausführung des folgenden Beispielcodes:
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
Es funktioniert sowohl in Firefox als auch in Chrome, löst jedoch in IE11 den folgenden Fehler aus:
Objekt unterstützt keine Eigenschafts- oder Methoden- "Werte"
Hier können Sie es testen: Geige .
Was wäre also eine schnelle Lösung?
javascript
internet-explorer
browser
ecmascript-6
user1170330
quelle
quelle
objectValues = Object.values;
zuobjectValues = ((obj) => { return Object.keys(obj).map(e => obj[e]); });
import 'core-js/es/object/values';
Object.values () ist Teil der ES8-Spezifikation (Juni 2017). Mit Cordova wurde mir klar, dass Android 5.0 Webview dies nicht unterstützt. Also habe ich Folgendes getan und die Polyfill-Funktion nur erstellt, wenn die Funktion nicht unterstützt wird:
if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);
quelle
Da Object eine ( nicht so ) aktuelle Implementierung ist, müssen Sie Ihre eigene Funktion erstellen , wenn Sie alle Browser (AKA IE8 und niedriger) unterstützen möchten :
function objectValues(obj) { var res = []; for (var i in obj) { if (obj.hasOwnProperty(i)) { res.push(obj[i]); } } return res; }
PS: Hab gerade den
ecmascript-6
Tag bemerkt . Übrigens behalte ich diese Antwort hier, nur für den Fall, dass jemand sie braucht.quelle
Wenn Sie bereits core-js verwenden (z. B. mit Angular), können Sie einfach die entsprechende Polyfüllung importieren:
import 'core-js/es7/object';
quelle
Sie können eine Polyfüllung 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 }));
quelle
Für Benutzer von UnderscoreJS können Sie Objektwerte abrufen , indem Sie Folgendes verwenden
_.values
:var obj = { foo: 'bar', baz: 42 }; console.log(_.values(obj)); // ['bar', 42]
quelle
var x = {Name: 'John', Age: 30, City: 'Bangalore'}; Object.prototype.values = function(obj) { var res = []; for (var i in obj) { if (obj.hasOwnProperty(i)) { res.push(obj[i]); } } return res; }; document.getElementById("tag").innerHTML = Object.values(x)
<p id="tag"></p>
quelle
Ich weiß, dass es ein altes Thema ist. Ich habe herumgespielt und möchte nur eine weitere Implementierung hinzufügen. Es ist einfach die Kartenversion, bei der die Karte selbst mit einer Reduzierung implementiert ist:
let obj = { foo: 'bar', baz: 42 }; const valueArray = Object.keys(obj).reduce((acc, key) => { acc.push(obj[key]); return acc; }, []); console.log(valueArray);
Es macht den Job, aber es hat etwas, das mich stört. Die Reduzierungsfunktion verwendet obj und das obj wurde nicht darin injiziert . Wir sollten globale Variablen innerhalb von Funktionen vermeiden und unsere Funktionen testbarer machen . Daher bevorzuge ich diese Version mit einem Reduzierungsfunktions-Helfer , der das obj als Parameter verwendet und die tatsächliche Reduzierungsfunktion zurückgibt . Es wird:
let obj = { foo: 'bar', baz: 42 }; // reducer function helper take obj and return the actual reducer function let reducerFuncHelper= obj => (acc, key) => { acc.push(obj[key]); return acc; } //much better const valueArray = Object.keys(obj).reduce(reducerFuncHelper(obj), []); console.log(valueArray);
quelle
Der beste Weg ist, es durch die Wertemethode von ramda zu ersetzen:
import * as R from 'ramda'; const obj = { foo: 'bar', test: 10 }; console.log(R.values(obj)) // ['bar', 10]
quelle
Da ich keine Antwort auf meine Bedürfnisse gefunden habe:
var obj = { foo: 'bar', baz: 42 }; console.log(obj[Object.keys(obj)[0]]) // bar console.log(obj[Object.keys(obj)[1]]) // 42
Nutzung der Möglichkeit von Objekten, diese pro Literal zu adressieren.
quelle
Sie können ein Array von Schlüsseln mit Object.keys () abrufen. Dies funktioniert auch im IE. Object.values () ist überhaupt nicht erforderlich, um Werte abzurufen, da wir die von Object.keys () erhaltenen Schlüssel verwenden können, um Werte wie folgt abzurufen:
var obj = { foo: 'bar', baz: 42 }; var keyArray = Object.keys(obj); for(var i = 0; i < keyArray.length; i++) console.log(obj[keyArray[i]]);
quelle