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? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in 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: