(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]
हाँ ... समर्थित नहीं है .. –