2016-08-03 6 views
41

ich ein einfaches Objekt wie das unten haben:Uncaught Typeerror: Object.values ​​ist keine Funktion JavaScript

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

Ich brauche zwei Arrays zu erstellen. Das erste Array ist ein Array aller Schlüssel aus dem Objekt. Ich habe dieses Array erstellt von:

var labels = Object.keys(countries); 

Dies funktioniert gut. Ich erhalte eine Reihe von Ländern. Nun, wenn ich versuche, ein Array aus den Werten zu erstellen ...

var labels = Object.values(countries); 

ich diesen Fehler: Uncaught TypeError: Object.values is not a function JavaScript

Ich weiß nicht, was ich falsch mache. Ich console.log countries bevor ich labels erkläre und danach und das Objekt bleibt gleich. Wie verwende ich richtig Object.values()?

+0

Welcher Browser verwenden Sie, weil nach MDN kann es nicht werden [unterstützt] (https://developer.mozilla.org/en -US/docs/Web/JavaScript/Referenz/Global_Objects/Objekt/Werte # Browser_compatibility) –

+0

@MarkC. Ich verwende Google Chrome 52.0.2743.82 –

Antwort

128

.values ist in vielen Browsern nicht unterstützt - Sie .map verwenden können, ein Array aller Werte zu erhalten:

var vals = Object.keys(countries).map(function(key) { 
    return countries[key]; 
}); 

See MDN doc: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values oder Amts doc: https://tc39.github.io/ecma262/#sec-object.values (dank @evolutionxbox für Korrektur)

+1

Seltsam. '.values' scheint so mächtig. Danke, dass du mir eine Alternative gezeigt hast. Es macht jetzt viel mehr Sinn! –

+0

(Psst, MDN, während erstaunlich ist nicht "offizielle" Dokumentation - https://tc39.github.io/ecma262/#sec-object.values) – evolutionxbox

+0

@evolutionxbox - Gah, thx. Hat den Schnitt gemacht! – tymeJV

1

Sieht aus wie dieses Problem in Safari neueste Version behoben wird. Ich kam um das gleiche Problem. Dieses Problem tritt in Browserversion 9.0.1 auf und tritt nicht in 10.1.1

Bearbeitung auf, um die Anlagen hinzuzufügen;

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

Haben Sie eine Referenz, die Sie für diese Information freigeben könnten? Ein Fehlerbericht oder etwas? –

+0

Ich habe keine Referenz. Die Mac-Systeme mit 9.0x-Versionen verursachen ständig das Problem. Aber mein System mit 10.1.1 verursacht nicht das gleiche Problem. – Venkata

1

verwenden "für ... in" wie bei mozilla diskutiert: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values

Hier ist der Code I verwendet:

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 
0

Ich denke Problem in Browsern auf Kompatibilität Kompilation Unterstützung, Sie kann Karte verwenden, um das gleiche zu erreichen.

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)

Verwandte Themen