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?
.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)
Es ist auch erwähnenswert, dass nur Node-Versionen> = 7.0.0 dies vollständig unterstützen.
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
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]
.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));
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)
Erwägen Sie die Verwendung von _.values(object)
Dokumente: https://lodash.com/docs/4.17.11#values