2017 আপডেট: ভ্যানিলা জেএস সহ 2-লাইনের উত্তর
এখানে সমস্ত উত্তর অত্যধিক জটিল , তাদের বেশিরভাগই 20 লাইন কোড বা তারও বেশি সময় নেয়।
এই উদাহরণটিতে ভ্যানিলা জাভাস্ক্রিপ্টের মাত্র দুটি লাইন ব্যবহার করা হয়েছে , কোনও লড্যাশ, আন্ডারস্কোর বা অন্যান্য গ্রন্থাগার নেই:
let f = (a, b) => [].concat(...a.map(a => b.map(b => [].concat(a, b))));
let cartesian = (a, b, ...c) => b ? cartesian(f(a, b), ...c) : a;
হালনাগাদ:
এটি উপরের মতো একই তবে এয়ারবিএনবি জাভাস্ক্রিপ্ট স্টাইল গাইডটি কঠোরভাবে অনুসরণ করতে উন্নত হয়েছে - এসলিন্ট-কনফিগারেশন-এয়ারবিএনবি-বেসের সাথে ESLint ব্যবহার করে যাচাই করা হয়েছে :
const f = (a, b) => [].concat(...a.map(d => b.map(e => [].concat(d, e))));
const cartesian = (a, b, ...c) => (b ? cartesian(f(a, b), ...c) : a);
আসল কোড সহ লিন্টারের সমস্যা সম্পর্কে আমাকে জানানোর জন্য ZuBB কে বিশেষ ধন্যবাদ ।
উদাহরণ
এটি আপনার প্রশ্নের সঠিক উদাহরণ:
let output = cartesian([1,2],[10,20],[100,200,300]);
আউটপুট
এটি সেই আদেশের আউটপুট:
[ [ 1, 10, 100 ],
[ 1, 10, 200 ],
[ 1, 10, 300 ],
[ 1, 20, 100 ],
[ 1, 20, 200 ],
[ 1, 20, 300 ],
[ 2, 10, 100 ],
[ 2, 10, 200 ],
[ 2, 10, 300 ],
[ 2, 20, 100 ],
[ 2, 20, 200 ],
[ 2, 20, 300 ] ]
ডেমো
ডেমো এতে দেখুন:
বাক্য গঠন
আমি এখানে যে বাক্য গঠন ব্যবহার করেছি তা নতুন কিছু নয়। আমার উদাহরণটি স্প্রেড অপারেটর এবং বাকী প্যারামিটারগুলি ব্যবহার করে - জাভাস্ক্রিপ্টের বৈশিষ্ট্যগুলি জুন 2015 এ প্রকাশিত ECMA-262 স্ট্যান্ডার্ডের 6th ষ্ঠ সংস্করণে সংজ্ঞায়িত হয়েছে এবং এর আগে অনেক উন্নত হয়েছে, ES6 বা ES2015 হিসাবে বেশি পরিচিত। দেখা:
এটি এই জাতীয় কোডটিকে এত সহজ করে তোলে যে এটি ব্যবহার না করা একটি পাপ। পুরানো প্ল্যাটফর্মগুলির জন্য যা এটিকে স্থানীয়ভাবে সমর্থন করে না আপনি সর্বদা এটি পুরানো বাক্য গঠনতে ট্র্যাপিলেস করার জন্য বাবেল বা অন্যান্য সরঞ্জাম ব্যবহার করতে পারেন - এবং বাস্তবে বাবেলের দ্বারা প্রতিস্থাপন করা আমার উদাহরণটি এখানে বেশিরভাগ উদাহরণের চেয়ে এখনও ছোট এবং সরল, তবে এটি হয় না প্রকৃতপক্ষে গুরুত্বপূর্ণ কারণ প্রতিস্থাপনের আউটপুট এমন কিছু নয় যা আপনার বোঝার বা বজায় রাখা দরকার, এটি কেবল একটি সত্য যে আমি আকর্ষণীয় পেয়েছি।
উপসংহার
কোডের শত শত লাইন লেখার দরকার নেই যা রক্ষণাবেক্ষণ করা শক্ত এবং এত সহজ জিনিসের জন্য পুরো লাইব্রেরি ব্যবহার করার দরকার নেই, যখন ভ্যানিলা জাভাস্ক্রিপ্টের দুটি লাইন খুব সহজেই কাজটি সম্পন্ন করতে পারে। আপনি দেখতে পাচ্ছেন যে এটি ভাষার আধুনিক বৈশিষ্ট্যগুলি ব্যবহার করতে সত্যিই অর্থ প্রদান করে এবং যেখানে আপনি আধুনিক বৈশিষ্ট্যগুলির কোনও নেটিভ সমর্থন না করে প্রত্নতাত্ত্বিক প্ল্যাটফর্মগুলি সমর্থন করতে চান আপনি সর্বদা নতুন সিনট্যাক্সটিকে পুরানোটির সাথে স্থানান্তরিত করতে বাবেল বা অন্যান্য সরঞ্জাম ব্যবহার করতে পারেন ।
1995 এর মতো কোড করবেন না
জাভাস্ক্রিপ্ট বিকশিত হয় এবং এটি একটি কারণে এটি করে। টিসি 39 নতুন বৈশিষ্ট্য যুক্ত করার সাথে ভাষা নকশার একটি আশ্চর্যজনক কাজ করে এবং ব্রাউজার বিক্রেতারা সেই বৈশিষ্ট্যগুলি বাস্তবায়নের জন্য আশ্চর্যজনক কাজ করে।
ব্রাউজারগুলিতে প্রদত্ত যে কোনও বৈশিষ্ট্যটির দেশীয় সমর্থনের বর্তমান অবস্থা দেখতে, দেখুন:
নোড সংস্করণে সমর্থনটি দেখতে, দেখুন:
প্ল্যাটফর্মগুলিতে আধুনিক সিনট্যাক্স ব্যবহার করতে যা এটি স্থানীয়ভাবে সমর্থন করে না, ব্যাবেল ব্যবহার করুন: