2017-03-16 30 views
11

我正在寻找Object.values()函数的替代版本。
由于described here这些功能在Internet Explorer中不受支持。Object.values的替代版本()

当执行下面的代码示例:

var obj = { foo: 'bar', baz: 42 }; 
console.log(Object.values(obj)); // ['bar', 42] 

它工作在两个,Firefox和Chrome,但增加了IE11以下错误:

对象不支持属性或方法“值“

在这里,您可以测试它:Fiddle

那么,什么是快速修复?

回答

33

您可以使用Object.keys()获得密钥数组,然后使用map()获取值。

var obj = { foo: 'bar', baz: 42 }; 
 
var values = Object.keys(obj).map(function(e) { 
 
    return obj[e] 
 
}) 
 

 
console.log(values)

随着ES6您可以在一个行中使用箭头功能写这个。

var values = Object.keys(obj).map(e => obj[e]) 
+0

你打败了我。 :) –

+0

冠军。你救了我的一天! – Khaleel

+1

谢谢!对于我的角色代码,我将'objectValues = Object.values;'改为'objectValues =((obj)=> {Object.keys(obj).map(e => obj [e]); }) ;' – Jeff

1

您可以使用填充工具:

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 }));

4

由于对象是(不那么)最近实施,如果你想支持所有浏览器(AKA IE8及以下版本),那么您需要创建自己的功能:

function objectValues(obj) { 
    var res = []; 
    for (var i in obj) { 
     if (obj.hasOwnProperty(i)) { 
      res.push(obj[i]); 
     } 
    } 
    return res; 
} 

PS:刚注意到ecmascript-6标签。顺便说一句,我在这里保留这个答案,以防万一有人需要它。

相关问题