use*_*330 55 javascript browser internet-explorer ecmascript-6
我正在寻找该Object.values()功能的替代版本.
如此处所述,Internet Explorer不支持该功能.
执行以下示例代码时:
var obj = { foo: 'bar', baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]
Run Code Online (Sandbox Code Playgroud)
它适用于Firefox和Chrome,但在IE11中引发以下错误:
对象不支持属性或方法"值"
在这里你可以测试它:小提琴.
那么,什么是快速修复?
Nen*_*car 138
您可以获取键数组,Object.keys()然后使用它map()来获取值.
var obj = { foo: 'bar', baz: 42 };
var values = Object.keys(obj).map(function(e) {
return obj[e]
})
console.log(values)Run Code Online (Sandbox Code Playgroud)
使用ES6,您可以使用箭头功能将其写入一行.
var values = Object.keys(obj).map(e => obj[e])
Run Code Online (Sandbox Code Playgroud)
Cho*_*ang 15
Object.values()是ES8(2017年6月)规范的一部分.使用Cordova,我意识到Android 5.0 Webview不支持它.所以,我做了以下操作,只有在不支持该功能时才创建polyfill函数:
if (!Object.values) Object.values = o=>Object.keys(o).map(k=>o[k]);
Run Code Online (Sandbox Code Playgroud)
Jor*_*lez 12
由于Object是一个(不是那么)最近的实现,如果你想支持所有浏览器(AKA IE8及以下版本),那么你需要创建自己的函数:
function objectValues(obj) {
var res = [];
for (var i in obj) {
if (obj.hasOwnProperty(i)) {
res.push(obj[i]);
}
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
PS:刚注意到ecmascript-6标签.顺便说一句,我在这里保留这个答案,以防有人需要它.
如果您已经在使用core-js(例如通过使用 Angular),您只需导入相应的 polyfill:
import 'core-js/es7/object';
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用polyfill:
const valuesPolyfill = function values (object) {
return Object.keys(object).map(key => object[key]);
};
const values = Object.values || valuesPolyfill;
console.log(values({ a: 1, b: 2, c: 3 }));Run Code Online (Sandbox Code Playgroud)