Implement a simple `createEventEmitter()` that returns an object with `on(event, fn)`, `emit(event, data)`, and `off(event, fn)` methods.
Problem Statement
Implement a simple `createEventEmitter()` that returns an object with `on(event, fn)`, `emit(event, data)`, and `off(event, fn)` methods.
Complexity
Time Complexity: -
Space Complexity: -
Hints
š” Hint 1:
Store event listeners in a Map or object: { eventName: [fn1, fn2] }.
š” Hint 2:
on() adds a listener, emit() calls all listeners, off() removes one.
š” Hint 3:
Use an object with event names as keys and arrays of functions as values.
ā
Solution:
```javascript
function createEventEmitter() {
const events = {};
return {
on(event, fn) { (events[event] = events[event] || []).push(fn); },
emit(event, data) { (events[event] || []).forEach(fn => fn(data)); },
off(event, fn) { events[event] = (events[event] || []).filter(f => f !== fn); }
};
}
```