Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未捕获的TypeError:Object.values不是JavaScript函数_Javascript_Arrays_Node.js_Object_Cross Browser - Fatal编程技术网

未捕获的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'
to
polyfills.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检查版本,然后升级: