Ik ben op zoek naar een alternatieve versie voor de functie Object.values()
.
Zoals hier beschrevenis de functie niet ondersteund in Internet Explorer.
Bij het uitvoeren van de volgende voorbeeldcode:
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
Het werkt in zowel Firefox als Chrome, maar geeft de volgende foutmelding in IE11:
Object ondersteunt geen eigenschap of methode “waarden”
Hier kun je het testen: Fiddle.
Dus, wat zou een snelle oplossing zijn?
Antwoord 1, autoriteit 100%
Je kunt een reeks sleutels krijgen met Object.keys()
en vervolgens map()
gebruiken om waarden te krijgen.
var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
return obj[e]
})
console.log(values)
Antwoord 2, autoriteit 13%
Object.values() maakt deel uit van de ES8(juni 2017)-specificatie. Toen ik Cordova gebruikte, realiseerde ik me dat Android 5.0 Webview het niet ondersteunt. Dus deed ik het volgende, waarbij ik de polyfill-functie alleen maakte als de functie niet wordt ondersteund:
if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);
Antwoord 3, autoriteit 10%
Aangezien Object een (niet zo) recente implementatie is, moet u uw eigen functie maken als u allebrowsers (AKA IE11 en lager) wilt ondersteunen :
function objectValues(obj) {
var res = [];
for (var i in obj) {
if (Object.prototype.hasOwnProperty.call(obj, i)) {
res.push(obj[i]);
}
}
return res;
}
PS: Ik zag net de tag ecmascript-6
. Trouwens, ik bewaar dit antwoord hier, voor het geval iemand het nodig heeft.
Antwoord 4, autoriteit 5%
Als u al gebruikmaakt van core-js(bijvoorbeeld door Angular te gebruiken), kunt u importeer gewoon de bijbehorende polyfill:
import 'core-js/es7/object';
Antwoord 5, autoriteit 4%
U kunt een polyfill gebruiken:
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 }));