.Map () এর মতো উচ্চতর অর্ডার ফাংশন কীভাবে জাভাস্ক্রিপ্টে অভ্যন্তরীণভাবে কাজ করে?


17

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

ধরুন আমি যদি এরকম কিছু লিখি

var numbers = [16, 25, 36];
var results = numbers.map(Math.sqrt);
console.log(results); // [4, 5, 6]

আমি জানি যে 'সংখ্যা' অ্যারের প্রতিটি উপাদান একের পর এক পুনরাবৃত্তি করছে, তবে কীভাবে ?

আমি এটি অনুসন্ধান করার চেষ্টা করেছি, তবে আমি এখনও কোনও সন্তোষজনক উত্তর পাইনি।


10
অ্যারে.ম্যাপের পলিফিলটি দেখুন
এজেড_

এটি নামক একটি ফাংশন mapযা অ্যারে টাইপের সাথে যুক্ত হয়েছিল। এই ফাংশনটি প্যারামিটার হিসাবে একটি ফাংশন নেয় যা অ্যারের মাধ্যমে লুপ করার সময় বলা হয়। ফাংশন কলগুলির রিটার্ন মানগুলি একটি অ্যারেতে ফিরে আসে।
ssc-hrep3

ম্যাপটি মূলত অ্যারেটি পুনঃব্যবহারের জন্য পূর্বের মতো কাজ করে মানে এটি অ্যারের সমস্ত উপাদান একের পর এক পেয়ে যাবে এবং তারপরে প্রতিটি উপাদানটিতে প্রদত্ত কমান্ড / ক্রিয়াকলাপ প্রয়োগ করবে এবং তারপরে এটিকে নতুন অ্যারেতে ঠেলে দেবে।
আদনান তারিক

উত্তর:


23

.mapকেবলমাত্র একটি পদ্ধতি যা কলব্যাক গ্রহণ করে, অ্যারের প্রতিটি আইটেমের জন্য কলব্যাক আহ্বান করে এবং একটি নতুন অ্যারের মান নির্ধারণ করে। এটি সম্পর্কে খুব বিশেষ কিছু নেই। এমনকি আপনি এটিকে সহজেই প্রয়োগ করতে পারেন:

Array.prototype.myMap = function(callback) {
  const newArr = [];
  for (let i = 0; i < this.length; i++) {
    newArr.push(callback(this[i], i, this));
  }
  return newArr;
}

var numbers = [16, 25, 36];
var results = numbers.myMap(Math.sqrt);
console.log(results); // [4, 5, 6]

সম্পূর্ণরূপে বৈশিষ্ট-অনুবর্তী হতে হলে আপনাকে চাই এছাড়াও প্রয়োজন , অন্যান্য বিষয়ের মধ্যে চেক করতে, যে thisএকটি বস্তু, যে callbackcallable, এবং থেকে .callপ্রেরণ দ্বিতীয় প্যারামিটারটি সঙ্গে কলব্যাক myMapআছে যদি এক, কিন্তু যারা বিবরণ নয় উচ্চ-অর্ডার কার্যকারিতা সম্পর্কে একটি সূচনা বোঝার জন্য গুরুত্বপূর্ণ।


8
এটি আমাকে অন্য কয়েকটি উত্তরগুলির কথা মনে করিয়ে দেয় ...
বার্গি

7

আমি প্রত্যেক বিক্রেতা অনুযায়ী তা বাস্তবায়ন অনুমিত হয় বৈশিষ্ট

প্রকৃত বাস্তবায়ন, উদাহরণস্বরূপ V8 কিছুটা জটিল হতে পারে, এই উত্তরটির শুরুতে উল্লেখ করুন। আপনি গিথুবে ভি 8 উত্সটি উল্লেখ করতে পারেন তবে বিচ্ছিন্নতার কেবল একটি অংশ বোঝা সহজ হতে পারে না।

উপরের উত্তর থেকে উদ্ধৃত:

এখানে ভি 8 বিকাশকারী। "বিল্টিনস" এর জন্য আমাদের বেশ কয়েকটি পৃথক বাস্তবায়ন কৌশল রয়েছে: কিছু সি ++ তে লেখা হয়, কিছু টর্কে, কিছুতে আমরা কোডস্টাবএসেম্ব্লারকে কল করি এবং কয়েকটি সরাসরি সমাবেশে and ভি 8 এর পূর্ববর্তী সংস্করণগুলিতে কিছু জাভাস্ক্রিপ্টে প্রয়োগ করা হয়েছিল। এই কৌশলগুলির প্রত্যেকটির নিজস্ব শক্তি রয়েছে (কোড জটিলতা, ডিবাগিবিলিটি, বিভিন্ন পরিস্থিতিতে পারফরম্যান্স, বাইনারি আকার এবং মেমরির খরচ); এছাড়াও সময়ের সাথে সাথে কোডটি বিকশিত হওয়ার alwaysতিহাসিক কারণ রয়েছে।

ES2015 স্পেস:

  1. যাক হে হতে ToObject ( এই মান)।
  2. রিটার্নআইফআরপ্রেট ( )।
  3. যাক লেন হতে ToLength (পান ( হে , "length"))।
  4. রিটার্নআইফআরপ্রেট ( লেন )
  5. তাহলে IsCallable ( callbackfn ) হল মিথ্যা , একটি নিক্ষেপ TypeError ব্যতিক্রম।
  6. যদি এটিআরগ সরবরাহ করা হয় তবে টি এইআর্গ হতে দিন ; অন্য দিন টি করা undefined
  7. যাক একজন হতে ArraySpeciesCreate ( হে , lên )।
  8. রিটার্নআইফআরপ্রেট ( )।
  9. কে 0 হতে দিন ।
  10. পুনরাবৃত্তি করুন, যখন কে < লেন
    1. যাক Pk ToString (হতে )।
    2. যাক kPresent HasProperty (হতে হে , Pk )।
    3. রিটার্নআইফআরপ্রেট ( কেপ্রেসাইন্ড )।
    4. তাহলে kPresent হয় সত্য , তারপর
      1. যাক kValue পান (হতে হে , Pk )।
      2. রিটার্নআইফআরপ্রেট ( কেভ্যালু )।
      3. যাক mappedValue কল (হতে callbackfn , টি , « kValue , , হে »)।
      4. রিটার্নআইফ্রেপ্ট ( ম্যাপডভ্যালু )।
      5. যাক অবস্থা CreateDataPropertyOrThrow (হতে একজন , Pk , mappedValue )।
      6. রিটার্নআইএফআরপ্ট ( স্ট্যাটাস )।
    5. কে দ্বারা 1 বৃদ্ধি করুন ।
  11. রিটার্ন

2
আমি কৌতূহলী, <li> list-style-typeঅনুমানটির ক্রোম বা এফএফ তে অনুলিপিযোগ্য নয়। আপনি নিজেই সংখ্যাগুলি লিখেছিলেন, বা আমি মিস করছি এমন আরও ভাল কোনও পদ্ধতি আছে?
পারফরম্যান্স

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