2017-03-16 64 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標籤。順便說一句,我在這裏保留這個答案,以防萬一有人需要它。

相關問題