Mam prosty obiekt taki jak ten poniżej:
var countries = {
"Argentina":1,
"Canada":2,
"Egypt":1,
};
Muszę utworzyć dwie tablice. Pierwsza tablica to tablica wszystkich kluczy z obiektu. Utworzyłem tę tablicę przez:
var labels = Object.keys(countries);
To działa dobrze. Otrzymuję szereg krajów. Teraz, gdy próbuję utworzyć tablicę z wartości ...
var labels = Object.values(countries);
Otrzymuję ten błąd: Uncaught TypeError: Object.values is not a function JavaScript
Nie wiem, co robię źle. Ja console.log countries
przed i po oświadczam, labels
a przedmiot pozostaje ten sam. Jak prawidłowo używać Object.values()
?
javascript
arrays
node.js
object
cross-browser
Alex Fallenstedt
źródło
źródło
Odpowiedzi:
.values
nie jest obsługiwany w wielu przeglądarkach - możesz użyć,.map
aby uzyskać tablicę wszystkich wartości:var vals = Object.keys(countries).map(function(key) { return countries[key]; });
Zobacz dokumentację MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values lub Official doc: https://tc39.github.io/ecma262/#sec- object.values (dzięki @evolutionxbox za korektę)
źródło
.values
wydaje się tak potężny. Dziękuję za pokazanie mi alternatywy. Teraz ma to o wiele więcej sensu!Object.values()
. Po prostu ugryzł nas dziś rano. Testowaliśmy na Chrome, ale nie na IE. Dzięki @tymeJV za świetną odpowiedź i przykład.Warto również zauważyć, że tylko wersje Node> = 7.0.0 w pełni to obsługują.
http://node.green
źródło
Dla tych, którzy tu trafili i używają Angulara, dodanie
import 'core-js/es7/object';
dopolyfills.ts
pliku rozwiązało problem./** 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
źródło
Wygląda na to, że ten problem został rozwiązany w najnowszej wersji Safari. Doszedłem do tego samego problemu. Ten problem występuje w przeglądarce w wersji 9.0.1 i nie występuje w wersji 10.1.1
Edycja w celu dodania załączników:
[snippet][1] [object value][2] [browser version][3]
źródło
Używanie „for ... in” omówione na mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values
Oto kod, którego użyłem:
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'
źródło
Myślę, że problem z obsługą kompilacji na kompatybilność przeglądarek, możesz użyć mapy, aby osiągnąć to samo.
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)
źródło
Rozważ użycie
_.values(object)
Dokumenty: https://lodash.com/docs/4.17.11#values
źródło