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 aus dem Objekt. 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
vorher und nachher erkläre labels
und das Objekt bleibt gleich. Wie verwende ich richtig Object.values()
?
javascript
arrays
node.js
object
cross-browser
Alex Fallenstedt
quelle
quelle
Antworten:
.values
wird in vielen Browsern nicht unterstützt - Sie können verwenden.map
, 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 offizielles Dokument: https://tc39.github.io/ecma262/#sec- object.values (danke @evolutionxbox für die Korrektur)
quelle
.values
scheint so mächtig. Vielen Dank, dass Sie mir eine Alternative gezeigt haben. Es macht jetzt viel mehr Sinn!Object.values()
. Habe uns heute Morgen gebissen. Wir hatten auf Chrome getestet, aber nicht auf IE. Vielen Dank, @tymeJV, für die großartige Antwort und das Beispiel.Es ist auch erwähnenswert, dass nur Knotenversionen> = 7.0.0 dies vollständig unterstützen.
http://node.green
quelle
Für diejenigen, die hier gelandet sind und Angular verwenden, hat das Hinzufügen
import 'core-js/es7/object';
zurpolyfills.ts
Datei das Problem für mich gelöst./** 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
quelle
Dieses Problem wurde anscheinend in der neuesten Version von Safari behoben. Ich bin um das gleiche Problem herumgekommen. Dieses Problem tritt in Browserversion 9.0.1 auf und tritt in 10.1.1 nicht auf
Bearbeiten, um die Anhänge hinzuzufügen:
[snippet][1] [object value][2] [browser version][3]
quelle
Verwenden von "for ... in", wie unter 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 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'
quelle
Ich denke, Problem bei der Kompilierungsunterstützung in Bezug auf die Browserkompatibilität. 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)
quelle
Erwägen Sie die Verwendung
_.values(object)
Dokumente: https://lodash.com/docs/4.17.11#values
quelle