未捕获的TypeError:Object.values不是函数JavaScript

Ale*_*edt 73 javascript arrays cross-browser object node.js

我有一个简单的对象,如下所示:

var countries = {
    "Argentina":1,
    "Canada":2,
    "Egypt":1,
};
Run Code Online (Sandbox Code Playgroud)

我需要创建两个数组.第一个数组是来自对象的所有键的数组.我创建了这个数组:

var labels = Object.keys(countries);
Run Code Online (Sandbox Code Playgroud)

这很好用.我获得了一系列国家.现在当我尝试从值创建数组时...

var labels = Object.values(countries);
Run Code Online (Sandbox Code Playgroud)

我收到此错误: Uncaught TypeError: Object.values is not a function JavaScript

我不知道我做错了什么.我console.log countries在声明之前labels和之后的console.log 并且对象保持不变.我该如何正确使用Object.values()

tym*_*eJV 204

.values许多浏览器都不支持 - 您可以使用.map获取所有值的数组:

var vals = Object.keys(countries).map(function(key) {
    return countries[key];
});
Run Code Online (Sandbox Code Playgroud)

请参阅MDN doc:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values或Official doc:https://tc39.github.io/ecma262/#sec- object.values(感谢@evolutionxbox进行更正)

  • 奇怪。`.values`似乎是如此强大。感谢您向我展示其他方法。现在,它变得更加有意义! (2认同)
  • 无论如何,对象键都是无序的,因此数组的顺序无关紧要。 (2认同)

小智 17

值得注意的是,只有Node版本> = 7.0.0完全支持这一点.

http://node.green


j3f*_*3ff 13

对于那些最终在这里并使用Angular的人来说,添加import 'core-js/es7/object';polyfills.ts文件解决了我的问题.

/** 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
Run Code Online (Sandbox Code Playgroud)