ES2015 হিসাবে দুটি পদ্ধতি রয়েছে।
এই অবজেক্টটি ফাংশনগুলিতে অন্তর্নির্মিত এবং এটি কোনও ফাংশনের যুক্তিগুলি যথাযথভাবে উল্লেখ করে। এটি প্রযুক্তিগতভাবে কোনও অ্যারে নয়, তবে সাধারণ অ্যারে অপারেশনগুলি এতে কাজ করবে না। প্রস্তাবিত পদ্ধতিটি হ'ল Array.fromএটির থেকে একটি অ্যারে তৈরি করতে ব্যবহার করা বা স্প্রেড অপারেটর।
আমি অন্যান্য উত্তর ব্যবহার করে উল্লেখ দেখেছি slice। এটা করবেন না। এটি অপ্টিমাইজেশন প্রতিরোধ করে (উত্স: MDN )।
Array.from(arguments)
[...arguments]
তবে, আমি যুক্তিযুক্ত হব যে argumentsএটি সমস্যাযুক্ত কারণ এটি কোনও ফাংশনকে ইনপুট হিসাবে গ্রহণ করে তা গোপন করে। একটি argumentsফাংশন সাধারণত এইভাবে লেখা হয়:
function mean(){
let args = [...arguments];
return args.reduce((a,b)=>a+b) / args.length;
}
কখনও কখনও, ফাংশন শিরোনামটি সি-জাতীয় ফ্যাশনে আর্গুমেন্টগুলি ডকুমেন্ট করার জন্য নীচের মতো লেখা হয়:
function mean(/* ... */){ ... }
তবে তা বিরল।
এটি সমস্যাযুক্ত কেন, উদাহরণস্বরূপ সি নিন। কে ওআর সি হিসাবে পরিচিত ভাষার প্রাচীন প্রাক-এএনএসআই উপভাষার সাথে পিছনের দিকে সামঞ্জস্যপূর্ণ কে ওআর সি ফাংশন প্রোটোটাইপগুলিকে একটি খালি আর্গুমেন্টের তালিকা থাকতে দেয়।
int myFunction();
/* This function accepts unspecified parameters */
এএনএসআই সি varargs( ...) এর জন্য এবং voidএকটি খালি যুক্তি-তালিকা নির্দিষ্ট করার জন্য একটি সুবিধা সরবরাহ করে ।
int myFunction(void);
/* This function accepts no parameters */
যখন অনেকে ফাংশনটি শূন্য আর্গুমেন্ট নেবে এমন প্রত্যাশা করেন তখন অনেকে অজান্তেই একটি unspecifiedআর্গুমেন্ট তালিকা ( int myfunction();) দিয়ে ফাংশন ঘোষণা করে । এটি প্রযুক্তিগতভাবে একটি বাগ কারণ ফাংশনটি হবে আর্গুমেন্ট গ্রহণ । তাদের যে কোনও সংখ্যা।
varargsসিতে একটি সঠিক ফাংশন রূপ নেয়:
int myFunction(int nargs, ...);
এবং জাভাস্ক্রিপ্ট আসলে এর সাথে কিছু মিল আছে।
আমি ইতিমধ্যে আপনাকে স্প্রেড অপারেটরটি দেখিয়েছি।
...name
এটি বেশ বহুমুখী, এবং খুব সুন্দরভাবে ডকুমেন্টেড ফ্যাশনে ভারার্গস নির্দিষ্ট করতে কোনও ফাংশনের যুক্তি-তালিকায় ("বিশ্রামের পরামিতি") ব্যবহার করা যেতে পারে:
function mean(...args){
return args.reduce((a,b)=>a+b) / args.length;
}
বা ল্যাম্বডা এক্সপ্রেশন হিসাবে:
((...args)=>args.reduce((a,b)=>a+b) / args.length)(1,2,3,4,5); // 3
আমি অনেকটা স্প্রেড অপারেটরকেই পছন্দ করি। এটি পরিষ্কার এবং স্ব-ডকুমেন্টিং।
for - inকোনওargumentsঅবজেক্টের সাথে লুপ ব্যবহার করা ভাল নয় - তারlengthপরিবর্তে সম্পত্তির উপরে পুনরায় পুনরুক্ত হওয়া লুপের জন্য 'সাধারণ' ব্যবহার করা উচিত