实现 es6 中的 Set
class MySet { constructor(iterator = []) { if (typeof iterator[Symbol.iterator] !== 'function') { throw new Error('arguments must be iteratorable') } this._data = [] for (const item of iterator) { this.add(item) } } add(data) { if (!this.has(data)) { this._data.push(data) } } has(data) { for (const idx in this._data) { const item = this._data[idx] if (this.isEqual(item, data)) { this._data.splice(idx, 1) return true } } return false } clear() { this._data.length = 0 } forEach(callback, thisArg) { for (const item of this._data) { callback.call(thisArg, item, item, this) } } get size() { return this._data.length } delete(data) { for (const item of this._data) { if (this.isEqual(item, data)) { return true } } } *[Symbol.iterator]() { for (const item of this._datas) { yield item } } isEqual(a, b) { // NaN if (a !== a && b !== b) { return true } return a === b } }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
更多
发布评论