2011-09-08 15 views
34

जब यह कर: IE8 मेंजावास्क्रिप्ट .map() फ़ंक्शन IE8 में समर्थित है?

var a = new Array("a", "b"); 
a.map(function() { }); 

मैं:

"Object doesn't support this property or method" 

IE8 में समर्थित नहीं इस विधि है, या मैं कुछ अन्य समस्या है? मेरे पास Google है, लेकिन बहुत सारे Google मानचित्र जावास्क्रिप्ट मुद्दे/प्रश्न प्राप्त करें ...

संपादित करें: ठीक है तो IE8 और नीचे .map() फ़ंक्शन का समर्थन नहीं करते हैं। कोड को एमडीएन here से कॉपी-पेस्ट करें जो मूल रूप से समर्थित नहीं है (और यह पूरी तरह से काम करने लगता है) के ठीक से चश्मा के अनुसार .map() फ़ंक्शन को ऐरे प्रोटोटाइप में जोड़ देगा।

+0

हाँ ... समर्थित नहीं है .. –

उत्तर

40

आईई 8 map() का समर्थन नहीं करता है। संदेह होने पर, जाँच MDN (मोज़िला डेवलपर नेटवर्क):

map - MDN

ऐसा लगता है कि आईई संस्करण में map() के लिए समर्थन जोड़ा 9.

+0

ठीक सुपर धन्यवाद के लिए विज़िटर इनवोकेशन के परिणामस्वरूप एक नई सरणी देता है। एमडीसी का समर्थन डेटा नहीं पता था। –

+0

मुझे संगतता स्क्रिप्ट भी उपयोगी मिली है। –

+0

क्या नक्शा() 'के लिए कोई विकल्प है? मेरी अधिकांश वेबसाइट के उपयोगकर्ता IE8 का उपयोग करते हैं .. और मैंने अपने कोड में 'map() 'का उपयोग किया है, अब मुझे क्या करना चाहिए? * (नोट: मैं jquery का उपयोग करता हूं) * – Shafizadeh

7

MDN का कहना है कि आईई 9 यह समर्थन करता है। आईई 8.

enter image description here

43

समाधान का कोई उल्लेख नहीं jQuery.map

इसके बजाय इस बात का

है: a.map(function() { });

आप

jQuery.map(a, function() { //what ever you want todo .. }

+2

धन्यवाद! इसे छोड़कर उत्तर में शामिल किया जाना चाहिए। – ProblemsOfSumit

+0

बिल्कुल सही, विश्वास नहीं कर सकता कि मुझे यह याद आया। तुम आदमी हो, धन्यवाद! यह * स्वीकृत उत्तर * होना चाहिए। ऊपर वाला एक बेकार है। –

+5

यह उपयोगी है लेकिन स्वीकार्य उत्तर नहीं होना चाहिए क्योंकि अन्य लोग कह रहे हैं। कोई भी नहीं कहा कि ओपी jQuery का उपयोग कर रहा था और jQuery सब कुछ का जवाब नहीं है। –

21
(function(fn){ 
    if (!fn.map) fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)r.push(f(this[i]));return r} 
    if (!fn.filter) fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(f(this[i]))r.push(this[i]);return r} 
})(Array.prototype); 
क्या करना है

पहले .map या .filter कॉल से पहले कहीं भी रखें। समस्या सुलझ गयी। jQuery.map() विधि अपेक्षित के रूप में काम नहीं करता है।

अद्यतन: मैं सिर्फ विरल सरणियों पर जाँच की है: अगर नक्शा या फिल्टर तर्क एक समारोह जो स्वीकार करता है और undefined मूल्य संभालती है - यह काम करता है, लेकिन परिणाम स्पष्ट नहीं हैं:

के परिभाषित करते हैं परीक्षण विरल सरणी:

var t = [] 
t[1] = 1; t[3] = 3; t[5] = 5; 

के IE8 टी के बारे में क्या कहना है देखते हैं: "[अपरिभाषित, 1, अपरिभाषित, 3, अपरिभाषित, 5]"

की कोशिश करते हैं:

t.filter(function(x){return x<4}) 

क्या यह, IE8 है? यह है: "[1, 3]"। नोट - कोई अपरिभाषित मान नहीं। मैं व्यक्तिगत रूप से इसकी अपेक्षा करता हूं।

लेकिन इस प्रयास करें:

t.map(function(x){return 2<<x}) 

और ... "[2, 4, 2, 16, 2, 64]"। वह अजीब है!:) इस प्रयास करें:?

t.map(function(x){return Math.pow(2,x)}) 

और ... "[NaN, 2, NaN, 8, NaN 32]" - मैं नहीं बल्कि पिछले परीक्षण के लिए इस परिणाम उम्मीद करेंगे। यह कम से कम तार्किक है - Math.pow() को number प्रकार, NaN वापस करने के लिए माना जाता है, भले ही इसका अर्थ अमान्य परिचालनों के लिए आरक्षित विशेष number प्रकार है। तो परिणाम कम या ज्यादा सही है। यह map परिणाम के रूप में पूरी तरह से सही होगा यदि टी एक स्पैस सरणी बना रहा।

तो आगे की हलचल के बिना - map और filter तरीकों के अंत में सही संस्करण:

(function(fn){ 
    if (!fn.map) fn.map=function(f){var r=[];for(var i=0;i<this.length;i++)if(this[i]!==undefined)r[i]=f(this[i]);return r} 
    if (!fn.filter) fn.filter=function(f){var r=[];for(var i=0;i<this.length;i++)if(this[i]!==undefined&&f(this[i]))r[i]=this[i];return r} 
})(Array.prototype); 

और परीक्षण:

var t = []; t[1] = 1; t[3] = 3; t[5] = 5; 
var t1 = t.map(function(x){return 2<<x}); 
var t2 = t.filter(function(x){return x<10}); 
console.debug(t); 
console.debug(t1); 
console.debug(t2); 

अपेक्षित परिणाम:

[वस्तु सरणी ] [अपरिभाषित, 1, अपरिभाषित, 3, अपरिभाषित, 5]

[वस्तु सरणी] [अपरिभाषित, 4, अपरिभाषित, 16, अपरिभाषित, 64]

[वस्तु सरणी] [अपरिभाषित, 1, अपरिभाषित, 3, अपरिभाषित, 5]

+0

इसे प्यार करो। बेहतर समाधान भी! –

+1

यह IE8 – acconrad

+0

में काम नहीं करता है कम करने के लिए पॉलीफिल क्या होगा? –

0

On MSDN it is said in Requirements for map: Not supported in the following document modes: Quirks, Internet Explorer 6 standards, Internet Explorer 7 standards, Internet Explorer 8 standards.

मानचित्र सरणी के लिए "विज़िटर" पैटर्न का कार्यान्वयन है। तो यह आसान विकल्प हो सकता है:

function visitArray(arr, visitor) { 
    var result = []; 

    for (var i = 0; i < arr.length; i ++) { 
     result[i] = visitor(arr[i]); 
    } 

    return result; 
} 

समारोह भी सरणी और समारोह जो प्रत्येक सरणी तत्व पर आह्वान करने के लिए ले जाता है। यह प्रत्येक मूल सरणी तत्व

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