আপনি এটি করতে পারেন:
var N = 10;
Array.apply(null, {length: N}).map(Number.call, Number)
ফলাফল: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
বা এলোমেলো মান সহ:
Array.apply(null, {length: N}).map(Function.call, Math.random)
ফলাফল: [0.7082694901619107, 0.9572225909214467, 0.8586748542729765, 0.8653848143294454, 0.008339877473190427, 0.9911756622605026, 0.8133423360995948, 0.837758846535935
ব্যাখ্যা
প্রথমে নোট করুন যেটি Number.call(undefined, N)সমান Number(N), যা কেবল ফেরত দেয় N। আমরা সেই সত্যটি পরে ব্যবহার করব।
Array.apply(null, [undefined, undefined, undefined])এর সমতুল্য Array(undefined, undefined, undefined), যা একটি ত্রি-উপাদান অ্যারে উত্পাদন করে undefinedএবং প্রতিটি উপাদানকে বরাদ্দ করে।
কীভাবে আপনি এটি এন উপাদানগুলিকে সাধারণ করতে পারেন ? কীভাবে Array()কাজ করে তা বিবেচনা করুন , যা এরকম কিছু হয়:
function Array() {
if ( arguments.length == 1 &&
'number' === typeof arguments[0] &&
arguments[0] >= 0 && arguments &&
arguments[0] < 1 << 32 ) {
return [ … ]; // array of length arguments[0], generated by native code
}
var a = [];
for (var i = 0; i < arguments.length; i++) {
a.push(arguments[i]);
}
return a;
}
এর নাম ECMAScript 5 যেহেতু , Function.prototype.apply(thisArg, argsArray)তার দ্বিতীয় প্যারামিটার হিসাবে একটি হাঁসের টাইপ অ্যারের মত বস্তু গ্রহণ করে। আমরা যদি প্রার্থনা করি Array.apply(null, { length: N })তবে তা কার্যকর হবে
function Array() {
var a = [];
for (var i = 0; i < /* arguments.length = */ N; i++) {
a.push(/* arguments[i] = */ undefined);
}
return a;
}
এখন আমাদের একটি এন- এলিমেন্ট অ্যারে রয়েছে, প্রতিটি উপাদান সেট করা আছে undefined। আমরা যখন .map(callback, thisArg)এটিতে কল করব তখন প্রতিটি উপাদান ফলাফলের জন্য সেট করা হবে callback.call(thisArg, element, index, array)। অতএব, [undefined, undefined, …, undefined].map(Number.call, Number)প্রতিটি উপাদান ম্যাপ করবে (Number.call).call(Number, undefined, index, array), যা একই Number.call(undefined, index, array), যা আমরা পূর্বে পর্যবেক্ষণ, মূল্যায়ন index। এটি অ্যারের সম্পূর্ণ করে যার উপাদানগুলি তাদের সূচক হিসাবে একই।
ন্যায়বিচারের Array.apply(null, {length: N})পরিবর্তে কেন ঝামেলা সহ্য করবেন Array(N)? সর্বোপরি, উভয় এক্সপ্রেশনই অপরিজ্ঞাত উপাদানগুলির একটি এন- এলিমেন্ট অ্যারের ফলাফল করবে । পার্থক্যটি হ'ল পূর্বের অভিব্যক্তিগুলিতে প্রতিটি উপাদান সুস্পষ্টভাবে অনির্ধারিত হিসাবে সেট করা থাকে, তবে পরবর্তীকালে প্রতিটি উপাদান কখনও সেট করা যায়নি। এর ডকুমেন্টেশন অনুযায়ী .map():
callbackকেবলমাত্র অ্যারের সূচকগুলির জন্য অনুরোধ করা হয়েছে যা নির্ধারিত মানগুলি দিয়েছে; এটি মুছে ফেলা হয়েছে বা যা কখনও মান নির্ধারিত হয় নি এমন সূচিগুলির জন্য অনুরোধ করা হয়নি।
অতএব, Array(N)অপর্যাপ্ত; Array(N).map(Number.call, Number)দৈর্ঘ্য এন এর একটি অবিবেচনাযুক্ত অ্যারেতে ফলত ।
সঙ্গতি
যেহেতু এই কৌশলটি Function.prototype.apply()ECMAScript 5 তে বর্ণিত আচরণের উপর নির্ভর করে , তাই এটি Chrome- 14 এবং ইন্টারনেট এক্সপ্লোরার 9 এর মতো প্রাক-ECMAScript 5 ব্রাউজারগুলিতে কাজ করবে না ।