𝐌𝐚𝐬𝐭𝐞𝐫𝐢𝐧𝐠 𝐉𝐚𝐯𝐚𝐒𝐜𝐫𝐢𝐩𝐭 𝐎𝐛𝐣𝐞𝐜𝐭𝐬 — 𝐀 𝐐𝐮𝐢𝐜𝐤 𝐃𝐞𝐞𝐩 𝐃𝐢𝐯𝐞 Objects are everywhere in JavaScript — whether you’re building APIs, handling data, or working with classes, they form the foundation of how JS works. 𝐂𝐫𝐞𝐚𝐭𝐢𝐧𝐠 𝐎𝐛𝐣𝐞𝐜𝐭𝐬 // Literal const person = { name: "Vedanti", age: 13, isDev: true }; // Constructor const car = new Object(); car.brand = "Toyota"; // Function constructor function Person(name, age) { this.name = name; this.age = age; } const p1 = new Person("Ananya", 24); // ES6 Class class PersonClass { constructor(name, age) { this.name = name; this.age = age; } } const p2 = new PersonClass("Ravi", 25); 𝐀𝐜𝐜𝐞𝐬𝐬𝐢𝐧𝐠, 𝐔𝐩𝐝𝐚𝐭𝐢𝐧𝐠 & 𝐃𝐞𝐥𝐞𝐭𝐢𝐧𝐠 console.log(person.name); // Dot notation console.log(person["age"]); // Bracket notation person.name = "Riya"; // Update delete person.age; // Delete 𝐋𝐨𝐨𝐩𝐢𝐧𝐠 & 𝐔𝐭𝐢𝐥𝐢𝐭𝐢𝐞𝐬 for (let key in person) console.log(key, person[key]); Object.keys(person); // ['name', 'isDev'] Object.values(person); // ['Riya', true] Object.entries(person); // [['name', 'Riya'], ['isDev', true]] 𝐎𝐛𝐣𝐞𝐜𝐭 𝐌𝐞𝐭𝐡𝐨𝐝𝐬 Object.assign({ a: 1 }, { b: 2 }); // Merge Object.freeze({ name: "Ananya" }); // Immutable Object.seal({ name: "Riya" }); // Can modify, not add/remove const proto = { greet() { console.log("Hi"); } }; const obj = Object.create(proto); obj.greet(); // Inherits greet 𝐃𝐞𝐬𝐭𝐫𝐮𝐜𝐭𝐮𝐫𝐢𝐧𝐠, 𝐒𝐩𝐫𝐞𝐚𝐝 & 𝐑𝐞𝐬𝐭 const user = { name: "Ananya", age: 24 }; const { name, age } = user; // Destructure const user2 = { ...user, city: "Delhi" } // Spread const { name: n, ...rest } = user; // Rest 𝐎𝐩𝐭𝐢𝐨𝐧𝐚𝐥 𝐂𝐡𝐚𝐢𝐧𝐢𝐧𝐠 & 𝐍𝐮𝐥𝐥𝐢𝐬𝐡 𝐂𝐨𝐚𝐥𝐞𝐬𝐜𝐢𝐧𝐠 const user3 = { address: { city: "Delhi" } }; console.log(user3?.address?.city); // "Delhi" console.log(user3.name ?? "Guest"); // "Guest" 𝐂𝐨𝐧𝐯𝐞𝐫𝐭 𝐎𝐛𝐣𝐞𝐜𝐭 ↔ 𝐀𝐫𝐫𝐚𝐲 const sample = { x: 1, y: 2 }; const entries = Object.entries(sample); // [['x',1],['y',2]] const backToObj = Object.fromEntries(entries); // { x:1, y:2 } Objects can be created, cloned, merged, frozen, or restructured — that’s what makes JavaScript so flexible. #JavaScript #WebDevelopment #Coding #LearnToCode #100DaysOfCode #DevCommunity
Mastering JavaScript Objects: A Quick Deep Dive
More Relevant Posts
-
🚀 𝗙𝗿𝗼𝗺 𝗭𝗲𝗿𝗼 𝘁𝗼 𝗛𝗲𝗿𝗼 𝗶𝗻 𝗔𝗻𝗴𝘂𝗹𝗮𝗿 — 𝗧𝗵𝗲 𝗖𝗼𝗺𝗽𝗹𝗲𝘁𝗲 𝗥𝗼𝗮𝗱𝗺𝗮𝗽 💡 🧠 𝟭. 𝗖𝗼𝗿𝗲 𝗪𝗲𝗯 & 𝗧𝘆𝗽𝗲𝗦𝗰𝗿𝗶𝗽𝘁 𝗙𝘂𝗻𝗱𝗮𝗺𝗲𝗻𝘁𝗮𝗹𝘀 Before diving into Angular, build a strong foundation: 1. HTML & CSS basics 2. JavaScript (ES6+ features: let/const, arrow functions, destructuring) 3. TypeScript (interfaces, classes, generics, decorators) 4. Modules & imports/exports 𝟮. 𝗔𝗻𝗴𝘂𝗹𝗮𝗿 𝗙𝘂𝗻𝗱𝗮𝗺𝗲𝗻𝘁𝗮𝗹𝘀 Start understanding how Angular works at its core: 1. Angular architecture (Modules, Components, Templates) 2. Angular CLI — create, serve, build 3. Components & Templates 4. Data binding (Interpolation, Property, Event, Two-way) 5. Directives (ngIf, ngFor, ngSwitch, custom directives) 6. Pipes (built-in & custom pipes) 𝟯. 𝗖𝗼𝗺𝗽𝗼𝗻𝗲𝗻𝘁 𝗜𝗻𝘁𝗲𝗿𝗮𝗰𝘁𝗶𝗼𝗻 Learn how components communicate: 1. Input() and Output() decorators 2. ViewChild and ContentChild 3. Services for shared logic 4. Event Emitters 5. Using BehaviorSubject for cross-component data sharing 𝟰. 𝗦𝗲𝗿𝘃𝗶𝗰𝗲𝘀 & 𝗗𝗲𝗽𝗲𝗻𝗱𝗲𝗻𝗰𝘆 𝗜𝗻𝗷𝗲𝗰𝘁𝗶𝗼𝗻 Master how Angular handles logic and data: 1. Creating and injecting services 2. Hierarchical injectors 3. ProvidedIn and lifetime scopes 4. Dependency injection in components and modules 𝟱. 𝗥𝗼𝘂𝘁𝗶𝗻𝗴 & 𝗡𝗮𝘃𝗶𝗴𝗮𝘁𝗶𝗼𝗻 Handle multiple views seamlessly: 1. RouterModule and RouterLink 2. Route parameters & query params 3. Lazy loading modules 4. Route guards (AuthGuard, CanActivate, Resolve) 5. Wildcard & fallback routes 𝟲. 𝗙𝗼𝗿𝗺𝘀 𝗶𝗻 𝗔𝗻𝗴𝘂𝗹𝗮𝗿 Forms are at the heart of most applications: 1. Template-driven forms 2. Reactive forms 3. FormGroup, FormControl, FormArray 4. Validation (built-in & custom) 5. Async validators 𝟳. 𝗛𝗧𝗧𝗣 & 𝗔𝗣𝗜 𝗖𝗼𝗺𝗺𝘂𝗻𝗶𝗰𝗮𝘁𝗶𝗼𝗻 Connect your app to a backend: 1. HttpClientModule setup 2. GET, POST, PUT, DELETE requests 3. Handling Observables 4. Error handling & interceptors 5. JWT Authentication & token handling 🧠 𝟴. 𝗥𝘅𝗝𝗦 & 𝗢𝗯𝘀𝗲𝗿𝘃𝗮𝗯𝗹𝗲𝘀 Reactive programming is key in Angular: 1. What is an Observable 2. Common operators (map, filter, switchMap, mergeMap, tap) 3. Subjects & BehaviorSubjects 4. Async pipe 5. Unsubscribing best practices 𝟵. 𝗠𝗼𝗱𝘂𝗹𝗲𝘀 & 𝗔𝗿𝗰𝗵𝗶𝘁𝗲𝗰𝘁𝘂𝗿𝗲 Organize and scale your app like a pro: 1. Feature modules & shared modules 2. Core module pattern 3. Lazy loading & preloading strategies 4. Folder structure best practices 𝟭𝟬. 𝗧𝗼𝗼𝗹𝗶𝗻𝗴 & 𝗘𝗻𝘃𝗶𝗿𝗼𝗻𝗺𝗲𝗻𝘁 Improve productivity and maintainability: 1. Environments (dev, prod) 2. Angular CLI commands (ng g, ng build, ng serve) 3. ESLint / Prettier setup 4. Unit testing (Jasmine, Karma) 5. End-to-end testing (Protractor, Cypress) 𝟭𝟭. 𝗦𝘁𝗮𝘁𝗲 𝗠𝗮𝗻𝗮𝗴𝗲𝗺𝗲𝗻𝘁 Handle complex app-wide data with ease: 1. BehaviorSubject-based local state 2. NgRx / Akita / NGXS 3. Actions, Reducers, Effects 4. Store selectors and entity management
To view or add a comment, sign in
-
-
🚀 #8 Why JavaScript Introduced Map (When Object Already Exists?) Today I explored the difference between Object and Map, and it finally clicked — Map isn't just another option… it's a smarter solution for key-value storage. 👇 ❌ The Limitations of Object Objects work fine for simple structured data, but they come with serious drawbacks when used as key-value stores: 🔸 Keys can only be strings or symbols — numbers, objects, or functions get converted to strings. 🔸 Insertion order isn’t guaranteed (especially in larger operations). 🔸 Risk of prototype pollution — built-in methods like toString or hasOwnProperty may be overwritten. 🔸 No direct size property → you must do Object.keys(obj).length. 🔸 Not performance-optimized for frequent add/remove operations. ✅ Why Map Was Introduced Map was created to solve these exact problems — it’s built specifically for efficient key-value data handling. ✔ Keys can be any type — numbers, objects, functions, arrays, etc. ✔ Maintains insertion order consistently. ✔ Has a built-in .size property. ✔ Offers faster performance for frequent insert/delete operations. ✔ No prototype interference — safer and cleaner. 📌 When to Use What? ✅ Use Object when: - You are representing structured/static data (e.g., user profile, product info, config settings). - Keys are known in advance and mostly strings. - You’re working with JSON-like structures. ✅ Use Map when: - You need a flexible key-value store. - Keys can be numbers, objects, functions, etc. - You frequently add/remove items and need better performance. - You want guaranteed insertion order and a direct .size property. 🛠 Map Quick Reference (Cheat Sheet) Here are the most commonly used Map features in a clean, scannable way 👇 🔹 set(key, value) → Add or update a key-value pair 🔹 get(key) → Retrieve value by key 🔹 has(key) → Check if a key exists 🔹 delete(key) → Remove a specific entry 🔹 clear() → Remove all entries 🔹 size → Returns total number of entries 🔹 map.keys() → Iterator of all keys 🔹 map.values() → Iterator of all values 🔹 map.entries() → Iterator of key-value pairs 🧪 Quick Example: const map = new Map(); map.set("IN", "India"); map.set(1, "One"); map.set({ lang: "JS" }, "JavaScript"); console.log(map.get(1)); // "One" console.log(map.size); // 3 console.log(map.has("IN")); // true 💬 Have you ever used an Object for something that should’ve been a Map? What was the impact? Let’s talk in the comments! #JavaScript #WebDevelopment #Frontend #ProgrammingTips #CodeSmarter #TechLearning
To view or add a comment, sign in
-
🚀 WHY CONST AND LET AREN’T LIKE VAR IN JAVASCRIPT If you’ve ever wondered why const “isn’t hoisted”… Here’s the truth 👇 All variables in JavaScript are hoisted, but they’re initialized differently. 🧠 Memory Creation Phase (Before Code Runs) • Keyword Hoisting: Yes, with undefined. • Initialization: Yes. • Access Before Declaration: Allowed, resulting in ReferenceError for `let` and `const`, but undefined for `var`. ReferenceError💡 The time between scope entry and declaration is called the Temporal Dead Zone (TDZ) — the variable exists but can’t be accessed yet. console.log(a); // undefined console.log(b); // ❌ ReferenceError console.log(c); // ❌ ReferenceError var a = 10; let b = 20; const c = 30; ⚙️ What Happens Internally (Visualization) |------------------ JavaScript Execution Context ------------------| | Memory Phase (Hoisting) | var a → undefined | let b → <uninitialized> (TDZ) | const c → <uninitialized> (TDZ) |------------------------------------------------------------------| | Execution Phase | console.log(a) → undefined | console.log(b) → ReferenceError | console.log(c) → ReferenceError | a = 10; b = 20; c = 30; | console.log(a,b,c) → 10 20 30 |------------------------------------------------------------------| ✅ In short: "const and let are hoisted — but remain uninitialized until their declaration is executed." This behavior avoids unexpected bugs and makes JavaScript more predictable 💪 #JavaScript #WebDevelopment #Learning #Programming #CodeNewbie #Frontend
To view or add a comment, sign in
-
Overview of Plotly.js:: Plotly.js is a powerful, open-source JavaScript library for creating interactive data visualizations. It supports a wide range of chart types and is built on top of D3.js and stack.gl, making it suitable for both 2D and 3D graphics. Key Features:: Chart Types: Over 40 types, including: Bar Charts Line Charts Scatter Plots 3D Charts Pie Charts Statistical Graphs Maps Interactivity: Charts are interactive by default, allowing users to hover, zoom, and pan. Declarative Syntax: Charts are defined using JSON objects, making it easy to customize every aspect, such as colors and layout. Getting Started:: To use Plotly.js, include the library in your HTML: html <script src="https://lnkd.in/dHtHtxvG"></script> Then, create a simple chart with the following code: javascript const data = [{ x: ['A', 'B', 'C'], y: [10, 15, 13], type: 'bar' }]; const layout = { title: 'Sample Bar Chart' }; Plotly.newPlot('myDiv', data, layout); Performance Considerations:: Rendering: Most charts are rendered using SVG, which is compatible across browsers. For high-performance needs, especially with many data points, WebGL is used for 3D charts. Customization: Users can create custom bundles to optimize the library size based on their specific needs. Resources:: For more detailed documentation and examples, visit the official Plotly.js documentation. This resource provides comprehensive guides on how to implement various chart types and features. ghfvbj
To view or add a comment, sign in
-
#4 Just wrapped up an intense session on the backbone of JavaScript: Arrays and Objects. These aren't just data structures; they're the building blocks for everything we do. Here’s a quick rundown of my key takeaways: JavaScript Deep Dive: Taming Arrays & Objects! 🚀 📌 Arrays: The Ordered Lists More than just [1, 2, 3], arrays are powerhouses with methods that can make or break your code. The Mutable vs. Immutable Showdown: slice(): The polite one. It takes a copy of a section without disturbing the original. splice(): The disruptive one. It removes/replaces elements in the original array. (A classic interview question! ✅) Combining Arrays: Forget push(array) which creates nested arrays! Use concat() or the more modern Spread Operator ... to cleanly merge arrays. Powerful Prototypes: Methods like Array.from() to create arrays from array-like objects (like a string) and flat() to flatten nested arrays are game-changers. 📌 Objects: The Key-Value Kings Objects store structured data, and mastering them is non-negotiable. Two Ways to Create: Object Literals: const obj = { key: 'value' } (Most common) Constructor: Object.create() (Creates a singleton) Constructor method with new Object() Accessing Properties: You can use dot notation (obj.key) or bracket notation (obj["key"]). Bracket notation is essential for keys with spaces or dynamically generated keys. Symbol as a Key: You can use a Symbol for a unique, non-enumerable property key. A hidden gem for defining special properties. Object.freeze() vs. Object.seal(): - freeze(): Makes an object immutable. No changes, additions, or deletions. - seal(): Allows modification of existing properties, but prevents adding or removing new ones. 🔥 Leveling Up: Higher-Order Functions & Destructuring Array Methods that Shine: - map(): Transform each element. (Create a new array of doubled values). - filter(): Select elements based on a condition. - reduce(): Boil down the array to a single value (like a sum). - forEach(): Execute a function for each element (but doesn't return a new array like map). Destructuring Magic: This is a syntax superpower! - Arrays: const [first, second] = myArray - Objects: const { name, email } = userObject It makes code incredibly clean and readable, especially in function parameters and React props. 💡 The Big Revelation: Understanding the difference between shallow copy and deep copy is crucial when working with these structures to avoid unintended side effects. It's amazing how much power is packed into these fundamentals. The more you learn, the more you realize how elegant and powerful JavaScript can be. What's your favorite JavaScript array or object method? Any "aha!" moments when you first understood destructuring? Share below! 👇 #JavaScript #Programming #WebDevelopment #Coding #LearnToCode #SoftwareEngineering #Arrays #Objects #Destructuring #LinkedInLearning #Tech
To view or add a comment, sign in
-
The Object: The Organized Container of JavaScript 🗃️ In JavaScript, the Object is king. Everything that isn't a simple, raw value (like a number, text, or true/false) is treated as an Object. It's the primary way the language groups data and actions together to model real-world concepts, like a user, a car, or a settings menu. The Real-World Analogy: The Backpack 🎒 Think of a JavaScript Object as a Backpack. ⏩ It holds different items inside. ⏩ It has actions you can perform on it (like zipping it up or emptying it). The Two Parts of Every Object An Object is essentially a collection of key-value pairs, where the "key" is a label (a string) and the "value" is the actual data. These pairs are categorized into two types: 1. Properties (The Items Inside) Properties are the data or values an object holds. They describe the object. 👉 Concept: a. Property The items inside the backpack JavaScript Example: color: "red" b. Key (Name) Backpack Analogy: The label on the item's tag (e.g., brand). javaScript Example: brand c. Value Backpack Analogy: The actual item (e.g., "Nike"). javaScript Example: "Nike" 👉 How to Access: You access a property using dot notation or bracket notation. ⏩ myBackpack.brand ⏩ myBackpack["color"] 2 Methods (The Actions It Can Do) Methods are functions (actions) stored as properties within the object. They define what the object knows how to do. 👉 Concept Method Backpack Analogy:The ability to zip up the backpack or empty its contents JavaScript Example empty: function() { ... } 👉 How to Execute: You execute a method by following the object and method name with parentheses (). ✔️ myBackpack.empty() ➡️ JavaScript's Core Object Types JavaScript uses the Object structure for almost all complex data, which is why you see it everywhere: ➡️ Object Type 👉 Plain Object A single entity or configuration. Example : { name: "Shola", isAdmin: true } 👉 Array An ordered list of items. Examples: [10, 20, 30] (An Array is a special type of Object). 👉 Function A block of runnable code. Example: Functions are technically callable objects with properties. 👉 Date A specific point in time. Example: new Date() The Object and Inheritance The reason the Object is so fundamental is because of Inheritance. Every standard Object in JavaScript (unless explicitly disabled) has a secret link to an Object Prototype. ⏩ Analogy: The Backpack you bought is based on a blueprint (the Prototype). Even though you didn't define a toString() method for your backpack, it automatically inherits that method from the master Object Prototype, allowing it to display itself as a string if needed. This prototype chain is how JavaScript objects share common functionality, making the language incredibly flexible but also sometimes challenging to debug.
To view or add a comment, sign in
-
-
Why I reach for Map in JavaScript (and you should too) If you're still using plain objects for every key-value need, try Map next time — especially when your keys aren’t simple strings or when performance and predictable iteration order matter. // Quick JavaScript Map example const users = new Map(); // set users.set(1, { name: "Asha", role: "Designer" }); users.set(2, { name: "Ravi", role: "Developer" }); // get console.log(users.get(1)); // { name: "Asha", role: "Designer" } // size, has, delete console.log(users.size); // 2 console.log(users.has(2)); // true users.delete(2); // iterate for (const [id, user] of users) { console.log(id, user.name); } // convert to array const arr = Array.from(users.entries()); When to choose Map: 1. Keys can be anything (objects, functions, primitives). 2. You need guaranteed insertion order during iteration. 3. You want faster operations for frequent add/remove compared to large-object hacks. Pro tip: Use Map for caches, metadata stores, or when keys are non-string references. For simple JSON-like data or when you need JSON.stringify, stick with plain objects. Have you used Map in a real project? What problem did it solve for you? 👇 #javascript #webdev #frontend #programming #codingtips
To view or add a comment, sign in
-
-
This article by Md. Fahim Bin Amin provides a comprehensive guide on how to build and style tables using plain HTML and CSS. I found it interesting that mastering these techniques can significantly enhance the presentation of structured data in our projects. What ways have you used tables to improve data visualization in your work?
To view or add a comment, sign in
-
#9: From Loop Newbie to Array Method Pro in JavaScript! 🚀 Today’s journey took me from basic loops to mastering powerful array methods. If you’ve ever wondered when to use for…of, for…in, forEach, map, filter, or reduce — this post is for YOU 👇 🔁 1. for…of – Best for Iterating Over Iterables (Array / Map) ✅ Returns full value ✅ Can use destructuring in Maps for (const [key, value] of myMap) { console.log(key, value); } ❌ Doesn’t work on plain objects (not iterable). 📍 2. for…in – Works on Objects & Arrays (Keys Only) ✅ Best for objects: for (const key in myObject) { console.log(key, myObject[key]); } ⚠ On arrays, it gives indexes, not values. ❌ Doesn’t work on Map. 📦 3. forEach() – Simple, Clean, No Return ✅ Great for looping arrays ✅ Accepts callback (value, index, array) ✅ Can pass an external function coding.forEach((item, index, arr) => console.log(item, index)); ❌ Doesn’t return anything (undefined always). 🗺️ 4. map() – Returns a New Array ✅ 🔹 Used when you want to transform data. const newArr = nums.map(num => num * 2); ✅ map() → RETURNS ❌ forEach() → DOES NOT RETURN 🧽 5. filter() – Keeps Only What Matches ✅ 🔍 Creates an array based on a condition. const filtered = nums.filter(num => num > 4); ✅ Returns only items that meet criteria. ⛓️ 6. Method Chaining = Cleaner Power Moves ⚡ const result = nums .map(num => num * 10) .map(num => num + 1) .filter(num => num > 50); 📉 7. reduce() – Converts Everything to a Single Value Used for totals, sums, or combining data. const total = prices.reduce((acc, curr) => acc + curr, 0); ✅ Perfect for shopping cart totals, analytics, etc. 🎯 Where You Stand Now: Level → Concept 🟢 Beginner → for...in, for...of 🟡 Intermediate → forEach, map, filter 🔴 Pro → reduce, chaining, destructuring in loops ✨My Takeaway: Once you understand array methods like map, filter, and reduce, you write less code, cleaner logic, and think more like a JavaScript pro. 💡 🧠 Which one confused you the most when you started learning loops in JS? Comment below — let’s grow together! 👇🔥 #JavaScript #WebDevelopment #LearningEveryday #Frontend
To view or add a comment, sign in
-
🎯 Day 19 of #100DaysLearningChallenge 🧠 Topic Learned: JavaScript Set Class A Set is a collection of unique elements. Building a custom Set helps understand its internal logic. Our Set uses a Map internally for uniqueness and fast lookups. 1. Constructor -------------- constructor() { this.items = new Map(); } - Initializes an empty Map to store elements. 2. Core Methods --------------- add(element) { if (this.items.has(element)) return false; this.items.set(element, element); return true; } - Adds element if not present. has(element) { return this.items.has(element); } - Checks existence. remove(element) { return this.items.delete(element); } - Deletes an element. size() { return this.items.size; } values() { return [...this.items.keys()]; } - Get count and all elements. 3. Advanced Operations ---------------------- union(otherSet) { const unionSet = new CustomSet(); this.values().forEach(v => unionSet.add(v)); otherSet.values().forEach(v => unionSet.add(v)); return unionSet; } - Combines two sets without duplicates. intersection(otherSet) { const intersectionSet = new CustomSet(); const [small, large] = this.size() < otherSet.size() ? [this, otherSet] : [otherSet, this]; small.values().forEach(v => { if (large.has(v)) intersectionSet.add(v); }); return intersectionSet; } - Finds common elements. ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ A Set is like a Map with identical keys and values. Using a Map allows uniqueness and fast lookup. This custom class shows the core logic behind JavaScript Sets. 🔗 Day 19 – https://lnkd.in/d6SJJkK6 #Day19 #100DaysOfCode #JavaScript #DataStructures #Set #CustomClass #CodingJourney
To view or add a comment, sign in
-
Explore content categories
- Career
- Productivity
- Finance
- Soft Skills & Emotional Intelligence
- Project Management
- Education
- Technology
- Leadership
- Ecommerce
- User Experience
- Recruitment & HR
- Customer Experience
- Real Estate
- Marketing
- Sales
- Retail & Merchandising
- Science
- Supply Chain Management
- Future Of Work
- Consulting
- Writing
- Economics
- Artificial Intelligence
- Employee Experience
- Workplace Trends
- Fundraising
- Networking
- Corporate Social Responsibility
- Negotiation
- Communication
- Engineering
- Hospitality & Tourism
- Business Strategy
- Change Management
- Organizational Culture
- Design
- Innovation
- Event Planning
- Training & Development