J'ai un objet simple comme celui ci-dessous:
var countries =
{
"Argentina":1,
"Canada":2,
"Egypt":1,
};
J'ai besoin de créer deux tableaux. Le premier tableau est un tableau de toutes les clés de l'objet. J'ai créé ce tableau par:
var labels = Object.keys(countries);
Ça marche bien. J'obtiens un éventail de pays. Maintenant, quand j'essaie de créer un tableau à partir des valeurs ...
var labels = Object.values(countries);
J'ai cette erreur: Uncaught TypeError: Object.values is not a function JavaScript
Je ne sais pas ce que je fais mal. Je console.log countries
avant de déclarer labels
et après et l'objet reste le même. Comment utiliser correctement Object.values()
?
.values
n'est pas pris en charge par de nombreux navigateurs. Vous pouvez utiliser .map
pour obtenir un tableau de toutes les valeurs:
var vals = Object.keys(countries).map(function(key) {
return countries[key];
});
Voir doc MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values ou doc officiel: https://tc39.github.io /ecma262/#sec-object.values (merci @evolutionxbox pour la correction)
Il est également intéressant de noter que seules les versions de nœud> = 7.0.0 le supportent pleinement.
Pour ceux qui ont fini ici et qui utilisent Angular, l'ajout de import 'core-js/es7/object';
au fichier polyfills.ts
a résolu le problème pour moi.
/** 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
On dirait que ce problème est résolu dans la dernière version de safari. Je suis venu autour du même problème. Ce problème se produit dans la version 9.0.1 du navigateur et non dans 10.1.1.
édition pour ajouter les pièces jointes;
[snippet][1]
[object value][2]
[browser version][3]
.values
n'est pas pris en charge par de nombreux navigateurs. Vous pouvez utiliser .map pour obtenir un tableau de toutes les valeurs:
var arr = [{ name: 'Steve',}, { name: 'Mike'}, { name: 'John'}];
function getStudentNames(students) {
return students.map(x => x[Object.keys(x)]);
}
console.log(getStudentNames(arr));
Utilisation de "for ... in" comme indiqué sur mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values
Voici le code que j'ai utilisé:
function Object_values(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(Object_values(obj)); // prints [ 'v1', 'v1', 'v1' ]
// OR
console.log(Object_values(obj).join(', ')); // prints v1, v1, v1
Je pense que le problème dans le support de compilation sur la compatibilité des navigateurs, vous pouvez utiliser map pour atteindre le même objectif.
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)
Pensez à utiliser _.values(object)