সমস্যা বিবরণ
গভীর নেস্টেড JSON অবজেক্ট দেওয়া আছে। যেসব অবজেক্টে title প্রপার্টি আছে, সেগুলোতে একটি ইউনিক id প্রপার্টি যোগ করতে হবে। মূল অ্যারে কপি না করে ইন-প্লেস মডিফাই করতে হবে।
সমাধান
const arr = [ /* বড় নেস্টেড ডেটা স্ট্রাকচার */ ];
const addId = (id = 1) => {
return function recur(obj) {
if ('title' in obj) {
obj.id = id++;
}
Object.keys(obj).forEach(el => {
Array.isArray(obj[el]) && obj[el].forEach(recur);
});
};
};
const mapId = arr => {
arr.forEach(addId);
};
mapId(arr);
console.log(JSON.stringify(arr, undefined, 4));
আউটপুট
সব title প্রপার্টি যুক্ত অবজেক্টে id প্রপার্টি যোগ হয়েছে (১, ২, ৩... ক্রমে)।
ব্যাখ্যা
addIdক্লোজার:idকাউন্টার রিটেইন করে।recurফাংশন: প্রতিটি অবজেক্টেtitleআছে কিনা চেক করে, থাকলেidঅ্যাসাইন করে।Object.keys(obj).forEachদিয়ে সব প্রপার্টি ট্রাভার্স, অ্যারে হলে রিকার্সিভ কল।- ইন-প্লেস মডিফিকেশন: মূল ডেটা স্ট্রাকচার পরিবর্তিত হয়।