js笔试面试题5道附答案

javascript 复制代码
/**
 * 题目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.

javascript 复制代码
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.

javascript 复制代码
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.

javascript 复制代码
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.

javascript 复制代码
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 } }

这个函数首先将两个对象合并为一个新对象,然后遍历新对象的键。如果键的值是数组,它会将两个数组合并为一个新数组。如果键的值是对象,它会递归调用merge函数来合并这两个对象。最后,返回合并后的对象。

5.

javascript 复制代码
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数据结构来去重,然后将其转换回数组。

相关推荐
lsx2024061 分钟前
CSS 网页布局:从基础到进阶
开发语言
蜗牛沐雨6 分钟前
警惕 Rust 字符串的性能陷阱:`chars().nth()` 的深坑与高效之道
开发语言·后端·rust
2401_8582861139 分钟前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
独立开阀者_FwtCoder1 小时前
【Augment】 Augment技巧之 Rewrite Prompt(重写提示) 有神奇的魔法
前端·javascript·github
我想说一句1 小时前
事件机制与委托:从冒泡捕获到高效编程的奇妙之旅
前端·javascript
guygg881 小时前
基于matlab的FIR滤波器
开发语言·算法·matlab
汤姆Tom1 小时前
JavaScript reduce()函数详解
javascript
小飞悟1 小时前
你以为 React 的事件很简单?错了,它暗藏玄机!
前端·javascript·面试
中微子1 小时前
JavaScript 事件机制:捕获、冒泡与事件委托详解
前端·javascript
双叶8362 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++