/**
* 题目1: 解析Cookie字符串转化为对象
* 输入:'foo=bar; equation=E%3Dmc%5E2'
* 输出:{ foo: 'bar', equation: 'E=mc^2' }
* 测试: parseCookie('foo=bar; equation=E%3Dmc%5E2')
*/
function parseCookie(str) {
}
/**
* 题目2: 找出对象中符合要求的项
* 输入: 原始对象:{ a: 1, b: '2', c: 3 }, 筛选条件:x => typeof x === 'string'
* 输出:{ 'b': '2' }
* 测试: pickBy({ a: 1, b: '2', c: 3 }, x => typeof x === 'string')
*/
function pickBy(obj, fn) {
}
/**
* 题目3: 字符串中划线转驼峰式
* 输入: 'this-is-a-selector'
* 输出: 'thisIsASelector'
* 测试: camelize('this-is-a-selector') === 'thisIsASelector'
*/
/**
*
*/
function camelize(str) {
}
/**
* 题目4:合并多个对象
* 输入:{ a: [1,2,3], b: { name: 'b'} }, { a: [4], b: { age: 18 } }
* 输出:{ a: [1,2,3,4], b:{name:'b', age: 18}}
* 测试: merge({ a: [1,2,3], b: { name: 'b'} }, { a: [4], b: { age: 18 } })
*/
function merge() {
}
/**
* 题目5:数组去重
* 输入: [1, 2, 1, 3, 4, 1, 2]
* 输出: [1,2,3,4]
* 测试: handle([1, 2, 1, 3, 4, 1, 2])
*/
const handle = (arr) => {
}
答え
1.
function parseCookie(cookieString) {
const cookieArray = cookieString.split('; ');
const cookieObject = {
};
for (const cookie of cookieArray) {
const [key, value] = cookie.split('=');
cookieObject[key] = decodeURIComponent(value);
}
return cookieObject;
}
// 测试
const result = parseCookie('foo=bar; equation=E%3Dmc%5E2');
console.log(result); // 输出: { foo: 'bar', equation: 'E=mc^2' }
この関数は、まず入力 Cookie 文字列をセミコロンとスペースに従って分割し、次に結果を配列に格納します。次に、配列内の各 Cookie を反復処理し、等号でキーと値に分割し、デコードされた値をオブジェクトに保存します。最後にオブジェクトが返されます。
2.
function pickBy(obj, condition) {
const result = {
};
for (const key in obj) {
if (condition(obj[key])) {
result[key] = obj[key];
}
}
return result;
}
// 测试
const inputObj = {
a: 1, b: '2', c: 3 };
const conditionFunc = x => typeof x === 'string';
const outputObj = pickBy(inputObj, conditionFunc);
console.log(outputObj); // 输出:{ 'b': '2' }
この関数は、まず空のオブジェクトを作成しますresult
。条件を満たすキーと値のペアを保存します。次に、入力オブジェクトのすべてのキーを反復処理し、各キーに対応する値が条件を満たすかどうかを確認します。条件が満たされる場合、キーと値のペアが結果オブジェクトに追加されます。最後に、結果オブジェクトが返されます。
3.
function camelize(str) {
return str
.split('-')
.map((word, index) =>
index === 0 ? word : word[0].toUpperCase() + word.slice(1)
)
.join('');
}
// 测试
console.log(camelize('this-is-a-selector')); // 输出: 'thisIsASelector'
この関数は、まず split()
メソッドを使用して、入力文字列str
を単語の配列に分割し、-
とします。セパレータ。次に、 map()
メソッドを使用して配列内の各単語を反復処理し、最初の単語を変更せずに残りの単語の最初の文字を大文字にします。最後に、join()
メソッドを使用して、処理された単語配列を文字列に連結します。
4.
function merge(obj1, obj2) {
const result = {
...obj1, ...obj2 };
for (const key in result) {
if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) {
result[key] = [...obj1[key], ...obj2[key]];
} else if (typeof obj1[key] === 'object' && typeof obj2[key] === 'object') {
result[key] = merge(obj1[key], obj2[key]);
}
}
return result;
}
const obj1 = {
a: [1, 2, 3], b: {
name: 'b' } };
const obj2 = {
a: [4], b: {
age: 18 } };
const mergedObj = merge(obj1, obj2);
console.log(mergedObj); // 输出: { a: [1, 2, 3, 4], b: { name: 'b', age: 18 } }
この関数は、まず 2 つのオブジェクトを新しいオブジェクトにマージし、次に新しいオブジェクトのキーを反復処理します。キーの値が配列の場合、2 つの配列を新しい配列にマージします。キーの値がオブジェクトの場合、 merge
関数を再帰的に呼び出して 2 つのオブジェクトをマージします。最後に、マージされたオブジェクトが返されます。
5.
function handle(arr) {
const uniqueArray = [...new Set(arr)];
return uniqueArray;
}
const inputArray = [1, 2, 1, 3, 4, 1, 2];
const outputArray = handle(inputArray);
console.log(outputArray); // [1, 2, 3, 4]
この関数は、JavaScript の Set データ構造を使用して重複を削除し、配列に変換し直します。