2017-03-16 10 views
11

मैं Object.values() समारोह के लिए एक वैकल्पिक संस्करण के लिए देख रहा हूँ।
described here के रूप में इंटरनेट एक्सप्लोरर में फ़ंक्शंस समर्थित नहीं है।वैकल्पिक संस्करण()

निम्न उदाहरण कोड को क्रियान्वित जब:

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

यह दोनों में काम करता है, फायरफॉक्स और क्रोम, लेकिन 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

धन्यवाद! मेरी कोणीय 5 कोड के लिए, मैं 'बदल objectValues ​​= Object.values; करने के लिए' objectValues ​​= '((obj) => { वापसी Object.keys (obj) .map (ई => obj [ई]); }) ; ' – Jeff

1

आप एक 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 }));

4

आप सभी ब्राउज़रों का समर्थन करना चाहते हैं (उर्फ

: IE8 और नीचे), तो आप अपने खुद के समारोह बनाने की जरूरत
function objectValues(obj) { 
    var res = []; 
    for (var i in obj) { 
     if (obj.hasOwnProperty(i)) { 
      res.push(obj[i]); 
     } 
    } 
    return res; 
} 

पुनश्च: बस ecmascript-6 टैग देखा। बीटीडब्ल्यू मैं इस जवाब को यहां रखता हूं, बस अगर किसी को इसकी आवश्यकता होती है।

संबंधित मुद्दे