it-swarm.com.de

Nicht abgerufener TypeError: Object.values ​​ist keine JavaScript-Funktion

Ich habe ein einfaches Objekt wie das folgende:

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

Ich muss zwei Arrays erstellen. Das erste Array ist ein Array aller Schlüssel des Objekts. Ich habe dieses Array erstellt von: 

var labels = Object.keys(countries);

Das funktioniert gut. Ich erhalte eine Reihe von Ländern. Wenn ich jetzt versuche, ein Array aus den Werten zu erstellen ...

var labels = Object.values(countries);

Ich erhalte 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 und danach deklariere, und das Objekt bleibt gleich. Wie verwende ich Object.values() richtig? 

59

.values wird in vielen Browsern nicht unterstützt - Sie können .map verwenden, um ein Array aller Werte abzurufen:

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

Siehe MDN-Dokument: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values ​​ oder Offizielle Dokumente: https://tc39.github.io /ecma262/#sec-object.values ​​ (Danke @evolutionxbox für die Korrektur)

182
tymeJV

Es ist auch erwähnenswert, dass nur Node-Versionen> = 7.0.0 dies vollständig unterstützen. 

http://node.green

11
phobos

Für diejenigen, die hier gelandet sind und Angular verwenden, löste das Hinzufügen von import 'core-js/es7/object'; zur polyfills.ts-Datei das Problem für mich.

/** 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
5
j3ff

Anscheinend wurde dieses Problem in der neuesten Version der Safari behoben. Ich bin um dieselbe Ausgabe herumgekommen. Dieses Problem tritt in Browserversion 9.0.1 auf und tritt nicht in 10.1.1 auf

bearbeiten, um die Anhänge hinzuzufügen;

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

.values wird in vielen Browsern nicht unterstützt - Sie können .map verwenden, um ein Array aller Werte abzurufen:

var arr = [{ name: 'Steve',}, { name: 'Mike'}, { name: 'John'}];

function getStudentNames(students) {
   return students.map(x => x[Object.keys(x)]);
}

console.log(getStudentNames(arr));

1

Verwenden von "for ... in" wie bei Mozilla beschrieben: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values ​​

Hier ist der Code, den ich verwendet habe:

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

Ich denke, das Problem bei der Kompilierungsunterstützung für Browser-Kompatibilität ist, Sie können map verwenden, um dasselbe 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)

0
KARTHIKEYAN.A

Erwägen Sie die Verwendung von _.values(object)

Dokumente: https://lodash.com/docs/4.17.11#values ​​

0