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()
?
Considere usar
_.values(object)
Documentos: https://lodash.com/docs/4.17.11#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.
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''
.values
no es compatible con muchos navegadores; puede usar
.map
para obtener una matriz de todos los valores:
var vals = Object.keys(countries).map(function(key) {
return countries[key];
});
Consulte el documento de MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values o Official doc: https://tc39.github.io/ecma262/#sec-object.values (gracias @evolutionxbox por la corrección)