この解答例はChatGPTによって生成されています,正しいかは自己判断で。
BFE.devでのAI解答例 - JavaScript コーディング問題
80. URLSearchParamsを実装する
class MyURLSearchParams {
constructor(queryString) {
this.params = {};
if (queryString) {
const query = queryString.startsWith("?")
? queryString.slice(1)
: queryString;
const pairs = query.split("&");
pairs.forEach((pair) => {
const [key, value] = pair.split("=");
this.append(key, value);
});
}
}
append(name, value) {
if (!this.params[name]) {
this.params[name] = [];
}
this.params[name].push(value);
}
delete(name) {
delete this.params[name];
}
entries() {
return Object.entries(this.params);
}
forEach(callback) {
this.keys().forEach((key) => {
callback(this.get(key), key, this);
});
}
get(name) {
return this.params[name] ? this.params[name][0] : null;
}
getAll(name) {
return this.params[name] || [];
}
has(name) {
return this.params[name] !== undefined;
}
keys() {
return Object.keys(this.params);
}
set(name, value) {
this.params[name] = [value];
}
sort() {
const sortedParams = {};
Object.keys(this.params)
.sort()
.forEach((key) => {
sortedParams[key] = this.params[key];
});
this.params = sortedParams;
}
toString() {
const paramPairs = [];
for (const [name, values] of Object.entries(this.params)) {
for (const value of values) {
paramPairs.push(`${encodeURIComponent(name)}=${encodeURIComponent(value)}`)
}
}
return paramPairs.join("&");
}
values() {
return Object.values(this.params).reduce((acc, curr) => {
return [...acc, ...curr];
}, []);
}
[Symbol.iterator]() {
const entries = this.entries();
let index = 0;
return {
next: () => {
if (index < entries.length) {
const result = { value: entries[index], done: false };
index++;
return result;
}
return { value: undefined, done: true };
},
};
}
}