以下为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(); }}