We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
class MyMap { constructor(iterable = []) { //验证是否是可迭代的对象 if (typeof iterable[Symbol.iterator] !== "function") { throw new TypeError(`你提供的${iterable}不是一个可迭代的对象`) } this._datas = []; for (const item of iterable) { // item 也得是一个可迭代对象 if (typeof item[Symbol.iterator] !== "function") { throw new TypeError(`你提供的${item}不是一个可迭代的对象`); } const iterator = item[Symbol.iterator](); //不一定是数组,所以用这种方式 const key = iterator.next().value; const value = iterator.next().value; this.set(key, value); } } set(key, value) { const obj = this._getObj(key); if (obj) {//已经有了就是要修改 //修改 obj.value = value; } else {//没有的话添加 this._datas.push({ key, value }) } } get(key) { const item = this._getObj(key); if (item) { return item.value; } return undefined;// 找不到 } get size() { return this._datas.length; } delete(key) { for (let i = 0; i < this._datas.length; i++) { const element = this._datas[i]; if (this.isEqual(element.key, key)) { this._datas.splice(i, 1); return true; } } return false; } clear() { this._datas.length = 0; } /** * 根据key值从内部数组中,找到对应的数组项 * @param {*} key */ _getObj(key) { for (const item of this._datas) { if (this.isEqual(item.key, key)) { return item; } } } has(key) { return this._getObj(key) !== undefined; } /** * 判断两个数据是否相等 * @param {*} data1 * @param {*} data2 */ isEqual(data1, data2) { if (data1 === 0 && data2 === 0) { return true; } return Object.is(data1, data2); } *[Symbol.iterator]() {//迭代器创建函数本身就是生成器函数 * for (const item of this._datas) { yield [item.key, item.value]; } } forEach(callback) { for (const item of this._datas) { callback(item.value, item.key, this); } } }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
The text was updated successfully, but these errors were encountered: