以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!

BFE.devAI解答 - JavaScript 代码题
80. 实现URLSearchParams

实现一个类MyURLSearchParams,维护一个内部的params对象,完成以下方法:

  • constructor(input: string = ''): 构造函数,接收一个查询字符串,将其解析为params对象
  • append(name: string, value: string): void: 将指定键值对添加到params对象中,如果已存在该键,则添加到值数组中
  • delete(name: string): void: 从params对象中删除指定键
  • entries(): Iterator<[string, string]>: 返回一个迭代器,迭代器中的每个元素是[name, value]的形式
  • forEach(callback: (value: string, name: string, searchParams: MyURLSearchParams) => void): void: 对params对象中的每个键值对调用指定的回调函数
  • getAll(name: string): string[]: 返回指定键的所有值的数组
  • get(name: string): string | null: 返回指定键的第一个值,如果键不存在则返回null
  • has(name: string): boolean: 判断指定键是否存在于params对象中
  • keys(): Iterator<string>: 返回一个迭代器,迭代器中的每个元素是参数名称
  • set(name: string, value: string): void: 设置指定键的值,如果已存在该键,则替换第一个值
  • sort(): void: 根据键名对params对象中的所有键值对进行排序
  • toString(): string: 将params对象转换为查询字符串的形式
  • values(): Iterator<string>: 返回一个迭代器,迭代器中的每个元素是参数值

实现如下:

class MyURLSearchParams {  constructor(input = '') {    this.params = new Map();    if (input.startsWith('?')) {      input = input.slice(1);    }    if (input) {      const pairs = input.split('&');      for (const pair of pairs) {        const [name, value] = pair.split('=');        this.append(decodeURIComponent(name), decodeURIComponent(value));      }    }  }  append(name, value) {    if (!this.params.has(name)) {      this.params.set(name, []);    }    this.params.get(name).push(String(value));  }  delete(name) {    this.params.delete(name);  }  entries() {    return this.params.entries();  }  forEach(callback) {    for (const [name, values] of this.params) {      for (const value of values) {        callback.call(this, value, name, this);      }    }  }  getAll(name) {    return this.params.get(name) || [];  }  get(name) {    const values = this.getAll(name);    return values.length > 0 ? values[0] : null;  }  has(name) {    return this.params.has(name);  }  keys() {    return this.params.keys();  }  set(name, value) {    this.params.set(name, [String(value)]);  }  sort() {    const keys = [...this.params.keys()];    keys.sort();    const newParams = new Map();    for (const key of keys) {      newParams.set(key, this.params.get(key));    }    this.params = newParams;  }  toString() {    const pairs = [];    for (const [name, values] of this.params) {      for (const value of values) {        pairs.push(`${encodeURIComponent(name)}=${encodeURIComponent(value)}`);      }    }    return pairs.join('&');  }  values() {    const values = [];    for (const [, val] of this.params) {      values.push(...val);    }    return values.values();  }}