ইন্টারনেট এক্সপ্লোরারে জাভাস্ক্রিপ্ট অ্যারে ফাংশনগুলি ঠিক করা (ইনডেক্সফ, ফরএচ ইত্যাদি) [বন্ধ]


137

মত বিশদ অন্যত্র , এবং অন্যথায় দৃশ্যত সুপরিচিত ইন্টারনেট এক্সপ্লোরার (স্পষ্টভাবে সংস্করণ 7, ও কিছু দৃষ্টান্ত, সংস্করণ 8) কী ফাংশন, বিশেষ করে বাস্তবায়ন না Array(যেমন forEach, indexOfইত্যাদি)।

এখানে এবং সেখানে বেশ কয়েকটি কাজের ক্ষেত্র রয়েছে, তবে আমি অনুলিপি প্রয়োগ করতে একটি নিজস্ব, বাস্তবায়নের সেটটিকে আমাদের সাইটে অনুলিপি করতে চাই, তার চেয়ে কপি এবং পেস্ট করুন বা আমাদের নিজস্ব বাস্তবায়নগুলি হ্যাক করে ফেলুন। আমি জেএস-পদ্ধতিগুলি পেয়েছি , যা আশাব্যঞ্জক বলে মনে হচ্ছে তবে ভেবেছিলাম যে অন্য লাইব্রেরিটি আরও উচ্চ প্রস্তাবিত কিনা তা দেখতে এখানে পোস্ট করব। বিবিধ বিবিধ মানদণ্ড:

  • এই ফাংশনগুলির জন্য গ্রন্থাগারটি কেবলমাত্র অপারেশন হওয়া উচিত যা ব্রাউজারের ইতিমধ্যে বাস্তবায়ন রয়েছে ( js-methodsএখানে বেশ ভালভাবে প্রদর্শিত হবে)।
  • অ- জিপিএল , দয়া করে, যদিও LGPL গ্রহণযোগ্য।

উত্তর:


220

অনেকে এমডিসি ফ্যালব্যাক বাস্তবায়নগুলি ব্যবহার করে (উদাঃ সূচকের জন্য )। তারা সাধারণত কঠোরভাবে মান-সম্মতিযুক্ত এমনকি সমস্ত আর্গুমেন্টের স্পষ্টরূপে পরীক্ষা করার পরিমাণ পর্যন্ত।

দুর্ভাগ্যক্রমে যদিও এটি স্পষ্ট যে লেখকরা এই কোডটিকে তুচ্ছ এবং অবাধে ব্যবহারযোগ্য হিসাবে বিবেচনা করছেন, এটি লিখিতভাবে প্রকাশ করার জন্য সুস্পষ্ট লাইসেন্স-অনুদান বলে মনে হয় না। পুরো উইকিটি হ'ল সিসি অ্যাট্রিবিউশন-শেয়ারএলাইক, যদি তা গ্রহণযোগ্য লাইসেন্স হয় (যদিও সিসি কোডের জন্য নকশাকৃত নয়)।

জেএস-পদ্ধতিগুলি সাধারণভাবে ঠিক দেখায়, তবে কীভাবে ফাংশনগুলি অনুমান করা হয় তার প্রান্তগুলি (যেমন উদাহরণস্বরূপ অপরিজ্ঞাত তালিকা আইটেমগুলি, তালিকায় পরিবর্তনকারী ফাংশন) মানদণ্ডগুলির মতো নয় as এটি অন্যান্য এলোমেলো অ-মানক পদ্ধতিতেও পূর্ণ, এতে ডজি স্ট্রিপট্যাগ এবং অসম্পূর্ণ ইউটিএফ -8 কোডেকের মতো কিছু প্রশ্নবিদ্ধ বিষয় রয়েছে (এটি unescape(encodeURIComponent)কৌশলটি কিছুটা অপ্রয়োজনীয়ও রয়েছে )।

এটি মূল্যবান কিসের জন্য, আমি এখানে যা ব্যবহার করি তা এখানে (যা আমি এর দ্বারা সর্বজনীন ডোমেনে প্রকাশ করি, যদি এটি একেবারেই কপিরাইটযোগ্য হিসাবে বলা যায়)। এটি এমডিসির সংস্করণগুলির চেয়ে খানিকটা খাটো কারণ এটি টাইপ-স্নিফ করার চেষ্টা করে না যে আপনি পাস নন-ফাংশন কলব্যাকস বা নন-ইন্টিজার সূচকগুলির মতো নির্বোধ কিছু করেননি, তবে এটি বাদ দিয়ে এটি মান-সম্মতিযুক্ত হওয়ার চেষ্টা করে। (আমি কিছু মিস করেছি কিনা তা আমাকে জানান; ;-))

'use strict';

// Add ECMA262-5 method binding if not supported natively
//
if (!('bind' in Function.prototype)) {
    Function.prototype.bind= function(owner) {
        var that= this;
        if (arguments.length<=1) {
            return function() {
                return that.apply(owner, arguments);
            };
        } else {
            var args= Array.prototype.slice.call(arguments, 1);
            return function() {
                return that.apply(owner, arguments.length===0? args : args.concat(Array.prototype.slice.call(arguments)));
            };
        }
    };
}

// Add ECMA262-5 string trim if not supported natively
//
if (!('trim' in String.prototype)) {
    String.prototype.trim= function() {
        return this.replace(/^\s+/, '').replace(/\s+$/, '');
    };
}

// Add ECMA262-5 Array methods if not supported natively
//
if (!('indexOf' in Array.prototype)) {
    Array.prototype.indexOf= function(find, i /*opt*/) {
        if (i===undefined) i= 0;
        if (i<0) i+= this.length;
        if (i<0) i= 0;
        for (var n= this.length; i<n; i++)
            if (i in this && this[i]===find)
                return i;
        return -1;
    };
}
if (!('lastIndexOf' in Array.prototype)) {
    Array.prototype.lastIndexOf= function(find, i /*opt*/) {
        if (i===undefined) i= this.length-1;
        if (i<0) i+= this.length;
        if (i>this.length-1) i= this.length-1;
        for (i++; i-->0;) /* i++ because from-argument is sadly inclusive */
            if (i in this && this[i]===find)
                return i;
        return -1;
    };
}
if (!('forEach' in Array.prototype)) {
    Array.prototype.forEach= function(action, that /*opt*/) {
        for (var i= 0, n= this.length; i<n; i++)
            if (i in this)
                action.call(that, this[i], i, this);
    };
}
if (!('map' in Array.prototype)) {
    Array.prototype.map= function(mapper, that /*opt*/) {
        var other= new Array(this.length);
        for (var i= 0, n= this.length; i<n; i++)
            if (i in this)
                other[i]= mapper.call(that, this[i], i, this);
        return other;
    };
}
if (!('filter' in Array.prototype)) {
    Array.prototype.filter= function(filter, that /*opt*/) {
        var other= [], v;
        for (var i=0, n= this.length; i<n; i++)
            if (i in this && filter.call(that, v= this[i], i, this))
                other.push(v);
        return other;
    };
}
if (!('every' in Array.prototype)) {
    Array.prototype.every= function(tester, that /*opt*/) {
        for (var i= 0, n= this.length; i<n; i++)
            if (i in this && !tester.call(that, this[i], i, this))
                return false;
        return true;
    };
}
if (!('some' in Array.prototype)) {
    Array.prototype.some= function(tester, that /*opt*/) {
        for (var i= 0, n= this.length; i<n; i++)
            if (i in this && tester.call(that, this[i], i, this))
                return true;
        return false;
    };
}

এখানে প্রয়োগ করা হয়নি এমন অন্যান্য ইসিএমএ 62২২-৫ পদ্ধতিতে অ্যারে reduce/ reduceRight, জেএসওএন এবং কয়েকটি নতুন Objectপদ্ধতি রয়েছে যা জেএস ফাংশন হিসাবে নির্ভরযোগ্যভাবে প্রয়োগ করা যেতে পারে।


5
সেই নির্দেশকের জন্য ধন্যবাদ - অন্যান্য লিঙ্কগুলি আমি মোজদেবতে দেখেছি যেখানে এই জাতীয় ইমপ্লগুলি পাওয়া যেতে পারে বাসি ছিল। এফওয়াইআই, কোডটি এমআইটি-লাইসেন্সযুক্ত, এখানে উল্লেখ করা হয়েছে: ডেভেলপার.মোজিলা.আর
প্রজেক্ট: কপিরাইটস

1
মজার বিষয় হল, আমি যদি জেডিকিউরিটি 1.4.2 এর আগে এমডিসি ইসিএমএ 262-5 ইমপ্লের সমন্বিত একটি জেএস ফাইলের রেফারেন্স করি তবে জ্যাকোয়ারিটি নষ্ট হয়েছে - যেমন সমস্ত নির্বাচক ব্যর্থ হন, নাল ফিরে আসেন। এমডিসি সরানো জ্যাকুইয়ের পরে প্রত্যাশিত আচরণের দিকে পরিচালিত করে। খুব অদ্ভুত.
cemerick

যে হয় জানতে আগ্রহী! এটি দেখতে পাবেন (আপনার কি কোনও পরীক্ষার কেস আছে?) ... আমি তাত্ক্ষণিকভাবে ভাবতে পারি না কেন এটি ঘটতে পারে, যদিও Qu২ লাইনে jQuery কী সন্দেহজনক বলে মনে হচ্ছে।
বোবিন্স

4
দ্রষ্টব্য: সর্বাধিক ব্রাউজারগুলিতে যেখানে এই স্টাবগুলি প্রয়োজন, আপনি যদি "ফর্ম (সোমারায় ইনডেক্স) do ... do" করেন তবে আপনাকে চেক হিসাবে somearray.hasOwnProperty (সূচি) ব্যবহার করতে হবে। আইই <= 8 এর জেএস ইঞ্জিন এতে অ্যারে.প্রোটোটাইপ এক্সটেনশনগুলিকে অন্তর্ভুক্ত করবে। গুগল অ্যাডওয়ার্ডস অ্যাসিঙ্ক কোড এটি করে না। অ্যান্ডস্কোর, বা অন্য কোনও লাইব্রেরির কার্যকারিতা যা এইটিকে মান দেয় সেরা Best
ট্র্যাকার 1

1
আইই 8-র জন্য এটিই দ্রুততম ইন্ডেক্সঅফ () বাস্তবায়ন I ধন্যবাদ!
অ্যালেক্স ডেনিসেনকো

27

অ্যান্ডস্কোর.জেএস এ একবার দেখুন ।


2
ইএস 5 শিম এবং অন্যান্য স্টাবগুলি (এমডিসি থেকে আসা) এরও অন্যান্য পরিণতি হতে থাকে। এই ধরণের ফাংশনের জন্য আন্ডারস্কোর বা অন্য কোনও গ্রন্থাগার ব্যবহার করা ভাল, যা যেখানে উপলব্ধ সেখানে অভ্যন্তরীণ পদ্ধতি ব্যবহার করবে।
ট্র্যাকার 1

অ্যান্ডসকোর.জেএস ভার অ্যার = ['এ', 'এ 1', 'বি'] _ ফিল্টার (আরআর, ফাংশন (ক) {রিটার্ন a.indexOf ('a')> -1;})
শ্রী_বিবি

9

ক্রিস কোয়াল একটি ছোট লাইব্রেরি সংকলন করেছেন যা ECMAScript 5 ফাংশনগুলির জন্য শিম হিসাবে কাজ করে যা ব্রাউজারের প্রয়োগ থেকে অনুপস্থিত হতে পারে। গতির জন্য অনুকূলিতকরণ এবং ব্রাউজার বাগের আশেপাশে কাজ করার জন্য কিছু লোকের কাজগুলি অন্যান্য লোকের দ্বারা বহুবার সংশোধিত হয়েছে। ফাংশনগুলি যত তাড়াতাড়ি সম্ভব স্পেসিফিকেশন অনুসরণ করতে লেখা হয়।

es5-shim.js এমআইটি লাইসেন্সের অধীনে প্রকাশিত হয়েছিল, অ্যারে.প্রোটোটাইপ এক্সটেনশানগুলি শীর্ষের নিকটে রয়েছে এবং আপনার খুব সহজে প্রয়োজন হয় না এমন কোনও ফাংশন আপনি কাটাতে এবং মুছে ফেলতে পারেন। আমি আপনাকে পরামর্শ দিচ্ছি যে স্ক্রিপ্টটি ছোট করা উচিত কারণ মন্তব্যগুলি এটির প্রয়োজনের চেয়ে অনেক বড় করে তোলে।


1

'কী ফাংশনগুলি বাস্তবায়ন না করা' দ্বারা আপনি আসলে 'ইসিএমএ 262 3' তৃতীয় এড'র সাথে সঙ্গতি রেখেছেন? :)

আপনি যে পদ্ধতিগুলি উল্লেখ করছেন সেটি নতুন 5'তম সংস্করণের অংশ - ব্রাউজারগুলি এটি সমর্থন না করে আপনি নিম্নলিখিত 'শিম' ব্যবহার করতে পারেন যা 3'র 5 তম বিস্তৃত http://github.com/kriskowal/narwhal- lib / অনুপস্থিত ফোঁটা / Narwhal-liberal এর সংক্ষিপ্ত রূপ / lib / অনুপস্থিত বিশ্বব্যাপী es5.js


1
এটি একটি ভাল শুরু, তবে এমডিসি থেকে নেওয়া হয়নি বাস্তবায়নের ক্ষেত্রে বেশ কয়েকটি ত্রুটি রয়েছে। যেমন। অ্যারে পদ্ধতিগুলির অনেকগুলি তাদের কলব্যাকগুলিতে পর্যাপ্ত যুক্তি দেয় না এবং কলব্যাক ফাংশনে অ্যারে পরিবর্তনের ক্ষেত্রে ঠিক সঠিকভাবে কাজ করে না।
বোবিনস

আমি জেএসকে আরও বুদ্ধিমান / ন্যূনতম-দক্ষ ভাষা তৈরি করতে যা কিছু পেতে পারি তা গ্রহণ করব। </
snark

1

এই স্ক্রিপ্টগুলি আমার পরীক্ষাগুলিতে ভাল কাজ করে না। আমি এমডিএন ডকুমেন্টের উপর ভিত্তি করে একই ফাংশন সহ একটি ফাইল তৈরি করি ।

অনেকগুলি সমস্যার এলাকায় ইন্টারনেট এক্সপ্লোরার 8. দেখুন কোড মীমাংসিত হয় egermano / অর্থাত-fix.js


0

অ্যান্ডস্কোর.জেএস সহ

var arr=['a','a1','b'] _.filter(arr, function(a){ return a.indexOf('a') > -1; })

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.