আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা স্ট্রিংগুলির একটি অ্যারে নেয় এবং স্ট্রিংগুলির সাথে সম্পর্কিত একটি বস্তু ফেরত দেয়৷
যেমন −
যদি অ্যারে −
হয়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"]}}
]
}
শর্তগুলি
স্ট্র অ্যারেতে সংরক্ষিত স্ট্রিংগুলি সাজানো হবে না এবং কোডটি তার বিরুদ্ধে শক্তিশালী হওয়া উচিত৷
স্ট্রিংগুলি x.y.x.y... প্যাটার্ন অনুসরণ করবে, যেখানে x সেই অ্যারের জন্য অনন্য হবে এবং y পরিবর্তন করতে পারে। আমার উদাহরণে দেশ এবং স্তর সবসময় একই হবে কারণ তারা x pos প্রতিনিধিত্ব করে।
এটির জন্য পুনরাবৃত্তিমূলক পদ্ধতির প্রয়োজন কারণ স্ট্র অ্যারেতে সংরক্ষিত স্ট্রিংগুলি যেকোনো দৈর্ঘ্যের হতে পারে। স্ট্রিং যত লম্বা হয় তত গভীর বাসা বাঁধে।
উদাহরণ
নিম্নলিখিত কোড -
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"
]
}
}
}