Alternatieve versie voor Object.values()

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)

Snippet uitvouwen


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 }));

Other episodes