আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি স্ট্রিং অ্যারে নেবে এবং স্ট্রিংগুলো অনুযায়ী একটি অবজেক্ট রিটার্ন করবে।
উদাহরণ −
যদি অ্যারেটি হয় −
const arr = [ "country.UK.level.1", "country.UK.level.2", "country.US.level.1", "country.UK.level.3" ];
তাহলে আউটপুট হবে −
const output = { "country": [ {"UK" : {"level" : ["1", "2", "3"]}}, {"US" : {"level" : ["1","2"]}} ] }
শর্তাবলী
str অ্যারেতে স্ট্রিংগুলো সোর্টেড থাকবে না এবং কোডটি সেটি হ্যান্ডেল করতে পারতে হবে।
স্ট্রিংগুলো x.y.x.y... প্যাটার্ন ফলো করবে, যেখানে x সেই অ্যারেতে ইউনিক হবে এবং y পরিবর্তনশীল। আমার উদাহরণে country এবং level সবসময় একই থাকবে কারণ সেগুলো x পজিশন উপস্থাপন করে।
এই সমস্যাটি রিকার্সিভ পদ্ধতিতে সমাধান করতে হবে কারণ স্ট্রিংগুলো যেকোনো দৈর্ঘ্যের হতে পারে। যত বড় স্ট্রিং, তত গভীর নেস্টিং।
উদাহরণ
নিচে কোডটি দেওয়া হলো −
const arr = [ "country.UK.level.1", "country.UK.level.2", "country.US.level.1", "country.UK.level.3" ]; const stringToObject = arr => { const obj = {}; arr.forEach(str => { let curr = obj; let splitted = str.split('.'); let last = splitted.pop(); let beforeLast = splitted.pop(); splitted.forEach( sub => { if(!curr.hasOwnProperty(sub)){ curr[sub] = {}; }; curr = curr[sub]; }); if(!curr[beforeLast]){ curr[beforeLast] = []; }; curr[beforeLast].push(last); }); return obj; }; console.log(JSON.stringify(stringToObject(arr), undefined, 4));আউটপুট
কনসোলে নিম্নলিখিত আউটপুট দেখা যাবে −
{ "country": { "UK": { "level": [ "1", "2", "3" ] }, "US": { "level": [ "1" ] } } }