values not array javascript arrays node.js object cross-browser

not - TypeError no capturado: Object.values no es una función JavaScript



object to array javascript (7)

Tengo un objeto simple como el siguiente:

var countries = { "Argentina":1, "Canada":2, "Egypt":1, };

Necesito crear dos matrices. La primera matriz es una matriz de todas las claves del objeto. Creé esta matriz por:

var labels = Object.keys(countries);

Esto funciona bien Obtengo una variedad de países. Ahora cuando trato de crear una matriz a partir de los valores ...

var labels = Object.values(countries);

Me sale este error: Uncaught TypeError: Object.values is not a function JavaScript

No sé lo que estoy haciendo mal. console.log countries antes y después de declarar labels y el objeto sigue siendo el mismo. ¿Cómo uso correctamente Object.values() ?



Creo que el problema en el soporte de compilación en la compatibilidad de los navegadores, puede usar el mapa para lograr lo mismo.

var countries = [ { "Argentina": 1, "Canada": 2, "Egypt": 1, "india": 1 }, { "Argentina": 1, "india": 1, "US": 2, "UK": 1, } ]; var unpick = countries.map(d=>{ return Object.keys(d) }); console.log(unpick)

var countries = [ { "Argentina": 1, "Canada": 2, "Egypt": 1, "india": 1 }, { "Argentina": 1, "india": 1, "US": 2, "UK": 1, } ]; var unpick = countries.map(d=>{ return Object.values(d) }); console.log(unpick)


Para aquellos que terminaron aquí y están usando Angular, agregando import ''core-js/es7/object''; al archivo polyfills.ts resolvió el problema.

/** IE9, IE10 and IE11 requires all of the following polyfills. **/ import ''core-js/es6/array''; import ''core-js/es6/date''; import ''core-js/es6/function''; import ''core-js/es6/map''; import ''core-js/es6/math''; import ''core-js/es6/number''; import ''core-js/es6/object''; import ''core-js/es6/parse-float''; import ''core-js/es6/parse-int''; import ''core-js/es6/regexp''; import ''core-js/es6/set''; import ''core-js/es6/string''; import ''core-js/es6/symbol''; import ''core-js/es6/weak-map''; import ''core-js/es7/array''; import ''core-js/es7/object''; // added import


Parece que este problema se solucionó en la última versión de Safari. Me encontré con el mismo problema. Este problema ocurre en la versión de navegador 9.0.1 y no ocurre en 10.1.1

Edición para agregar los archivos adjuntos:

[snippet][1] [object value][2] [browser version][3]


También vale la pena señalar que solo las versiones de nodo> = 7.0.0 son totalmente compatibles con esto.

http://node.green


Usando "for ... in" como se discutió en mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

Aquí está el código que usé:

function objectValues(obj) { let vals = []; for (const prop in obj) { vals.push(obj[prop]); } return vals; } // usage let obj = {k1: ''v1'', k2: ''v1'', k3: ''v1''}; console.log(objectValues(obj)); // prints the array [ ''v1'', ''v1'', ''v1'' ] // OR console.log(objectValues(obj).join('', '')); // prints the string ''v1, v1, v1''