未捕获的TypeError:Object.values不是JavaScript函数
我有一个简单的对象,如下所示:未捕获的TypeError:Object.values不是JavaScript函数,javascript,arrays,node.js,object,cross-browser,Javascript,Arrays,Node.js,Object,Cross Browser,我有一个简单的对象,如下所示: var countries = { "Argentina":1, "Canada":2, "Egypt":1, }; 我需要创建两个数组。第一个数组是对象中所有键的数组。我通过以下方式创建了此阵列: var labels = Object.keys(countries); 这很有效。我得到了一系列的国家。现在,当我尝试从值创建数组时 var labels = Object.values(countries); 我得到这个错误:unca
var countries = {
"Argentina":1,
"Canada":2,
"Egypt":1,
};
我需要创建两个数组。第一个数组是对象中所有键的数组。我通过以下方式创建了此阵列:
var labels = Object.keys(countries);
这很有效。我得到了一系列的国家。现在,当我尝试从值创建数组时
var labels = Object.values(countries);
我得到这个错误:uncaughttypeerror:Object.values不是一个函数JavaScript
我不知道我做错了什么。I
console.log countries
在声明标签前后,对象保持不变。如何正确使用对象.values()
?。许多浏览器都不支持值-您可以使用.map
获取所有值的数组:
var vals = Object.keys(countries).map(function(key) {
return countries[key];
});
请参阅MDN文档:或官方文档:(感谢@evolutionxbox的更正)看来这个问题在Safari最新版本中已经修复。我也遇到了同样的问题。此问题在浏览器版本9.0.1中出现,在10.1.1中没有出现
编辑以添加附件:
[snippet][1]
[object value][2]
[browser version][3]
使用mozilla上讨论过的“for…in”:
以下是我使用的代码:
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'
我认为在编译支持浏览器兼容性的问题上,可以使用map来实现同样的功能
var国家=[
{
“阿根廷”:1,
“加拿大”:2,
“埃及”:1,
“印度”:1
},
{
“阿根廷”:1,
"印度":一,,
"美国":二,,
“英国”:1,
}
];
var unpick=countries.map(d=>{return Object.keys(d)});
console.log(unpick)
还值得注意的是,只有节点版本>=7.0.0完全支持此功能
对于那些最终使用Angular的用户,添加import'core js/es7/object'
topolyfills.ts
文件为我解决了这个问题
/**IE9、IE10和IE11需要以下所有填充物**/
导入“core js/es6/array”;
导入“core js/es6/date”;
导入“核心js/es6/功能”;
导入“核心js/es6/map”;
导入“core js/es6/math”;
导入“core js/es6/number”;
导入“核心js/es6/object”;
导入“core js/es6/parse float”;
导入“core js/es6/parse int”;
导入“core js/es6/regexp”;
导入“core js/es6/set”;
导入“core js/es6/string”;
导入“核心js/es6/symbol”;
导入“核心js/es6/弱映射”;
导入“core js/es7/array”;
导入“core js/es7/object”;//新增进口
考虑使用值(对象)
文档:您使用的浏览器是什么,因为根据MDN,它不能是@MarkC。我正在使用谷歌Chrome 52.0.2743.82.values
似乎非常强大。谢谢你给我展示了另一种选择。现在它变得更有意义了!(psst,mdn虽然不是“官方”文档-)这里没有提到的是Object.keys会在数组中重新排列返回的数组,类似于具有随机键顺序的对象,因此返回值的顺序可能与原始对象中的顺序不同。var anObj={100:a',2:b',7:c'};console.log(Object.keys(anObj));//控制台:['2','7','100']对象键无论如何都是无序的,因此数组顺序应该无关紧要。IE 11是唯一一款不支持Object.values()
的现代浏览器。今天早上咬了我们一口。我们在Chrome上进行了测试,但没有IE。谢谢@tymeJV提供了很好的答案和示例。您有没有参考资料可以分享这些信息?bug报告什么的?我没有参考资料。带有9.0x版本的mac系统一直是问题的根源。但是我的系统搭载10.1.1并没有引起同样的问题。在运行jest测试时,我以为我是在节点v8上,但事实证明我是在节点v6上。检查你的节点版本!node-vnode-v检查版本,然后升级: