Explorer
Node.js

Implement a full EventEmitter with `on`, `once`, `off`, `emit`, and `listenerCount` methods.

Problem Statement

Implement a full EventEmitter with `on`, `once`, `off`, `emit`, and `listenerCount` methods.

Complexity

Time Complexity: -

Space Complexity: -

Hints

šŸ’” Hint 1: once() registers a listener that auto-removes after first call. šŸ’” Hint 2: Wrap the once listener in a function that calls off after execution. šŸ’” Hint 3: listenerCount(event) returns the number of listeners for that event. āœ… Solution: ```javascript class EventEmitter { constructor() { this.events = {}; } on(event, fn) { (this.events[event] = this.events[event] || []).push(fn); return this; } once(event, fn) { const wrapper = (...args) => { this.off(event, wrapper); fn(...args); }; wrapper._original = fn; this.on(event, wrapper); return this; } off(event, fn) { this.events[event] = (this.events[event] || []).filter(f => f !== fn && f._original !== fn); return this; } emit(event, ...args) { (this.events[event] || []).forEach(fn => fn(...args)); return this; } listenerCount(event) { return (this.events[event] || []).length; } } ```

Event Emitter with Once and Remove

Hard
Implement a full EventEmitter with `on`, `once`, `off`, `emit`, and `listenerCount` methods.
Editor
Loading Editor...
Evaluate code
Output:Click "Run" above to execute and verify your code here.
{"results":["a","once:a","b"],"count":1}