Estoy buscando una versión alternativa para la función Object.values()
.
Como se describe aquí la función no es compatible con Internet Explorer.
Al ejecutar el siguiente código de ejemplo:
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
Funciona tanto en Firefox como en Chrome, pero arroja el siguiente error en IE11:
Object doesn't support property or method "values"
Aquí puedes probarlo: [Fiddle][2].
Entonces, ¿cuál sería una solución rápida?
Puedes obtener un array de claves con Object.keys()
y luego usar map()
para obtener los valores.
begin snippet: js hide: false console: true babel: false -->
var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
return obj[e]
})
console.log(values)
Con ES6 puedes escribir esto en una línea usando arrow-functions.
var values = Object.keys(obj).map(e => obj[e])
Dado que Object es una implementación (no tan) reciente, si quieres soportar todos los navegadores (AKA IE8 e inferiores), entonces necesitas crear tu propia función:
function objectValues(obj) {
var res = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
res.push(obj[i]);
}
}
return res;
}
PS: Acabo de notar la etiqueta ecmascript-6
. Por cierto, guardo esta respuesta aquí, por si alguien la necesita.
Puede utilizar un polyfill:
begin snippet: js hide: false console: true babel: false -->
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 }));