返回

大刀阔斧撕开JavaScript面试谜题:通往offer的康庄大道

前端

手撕JavaScript面试高频题:斩获offer易如反掌

前言

JavaScript作为前端开发的主流语言,其重要性日益凸显。在激烈的面试竞争中,手撕代码题已成为考察候选人编程能力的重要环节。本文将梳理总结一系列JavaScript面试高频手撕题,助你轻松化繁为简,斩获offer!

1. 实现数组去重

题目 实现一个函数,对给定数组进行去重,返回一个不包含重复元素的新数组。

解题思路:

function removeDuplicates(array) {
  // 创建一个新Set来存储去重后的元素
  const uniqueSet = new Set();

  // 遍历原数组
  for (let element of array) {
    // 如果元素不在Set中,则加入Set
    if (!uniqueSet.has(element)) {
      uniqueSet.add(element);
    }
  }

  // 将Set转为数组并返回
  return Array.from(uniqueSet);
}

2. 实现数组扁平化

题目: 实现一个函数,对给定数组进行扁平化,将所有嵌套数组元素拉平到一个新的一维数组中。

解题思路:

function flattenArray(array) {
  // 创建一个新数组来存储扁平化的元素
  const flatArray = [];

  // 递归遍历原数组
  function flatten(array) {
    for (let element of array) {
      // 如果元素是数组,则继续递归遍历
      if (Array.isArray(element)) {
        flatten(element);
      } else {
        // 如果元素不是数组,则加入扁平化数组
        flatArray.push(element);
      }
    }
  }

  flatten(array);

  // 返回扁平化数组
  return flatArray;
}

3. 实现斐波那契数列生成

题目: 实现一个函数,生成斐波那契数列的前n项,其中斐波那契数列的定义为:F(0) = 0,F(1) = 1,F(n) = F(n-1) + F(n-2)(n >= 2)。

解题思路:

function fibonacci(n) {
  // 初始化斐波那契数列的前两项
  let fib = [0, 1];

  // 如果n小于2,则直接返回
  if (n < 2) {
    return fib.slice(0, n);
  }

  // 遍历从3开始到n的数字
  for (let i = 2; i <= n; i++) {
    // 计算第i项斐波那契数
    fib[i] = fib[i - 1] + fib[i - 2];
  }

  // 返回斐波那契数列的前n项
  return fib.slice(0, n);
}

4. 实现冒泡排序

题目描述: 实现一个冒泡排序算法,对给定数组进行升序排序。

解题思路:

function bubbleSort(array) {
  // 数组长度
  const length = array.length;

  // 外层循环,控制遍历次数
  for (let i = 0; i < length - 1; i++) {
    // 内层循环,比较相邻元素,并进行交换
    for (let j = 0; j < length - i - 1; j++) {
      if (array[j] > array[j + 1]) {
        // 交换两个元素
        [array[j], array[j + 1]] = [array[j + 1], array[j]];
      }
    }
  }

  // 返回排序后的数组
  return array;
}

5. 实现快速排序

题目描述: 实现一个快速排序算法,对给定数组进行升序排序。

解题思路:

function quickSort(array) {
  // 如果数组为空或只有一个元素,则直接返回
  if (array.length <= 1) {
    return array;
  }

  // 选择一个基准值(通常为数组中间元素)
  const pivot = array[Math.floor(array.length / 2)];

  // 将数组划分为小于基准值、等于基准值和大于基准值的三部分
  const less = [];
  const equal = [];
  const greater = [];

  for (let element of array) {
    if (element < pivot) {
      less.push(element);
    } else if (element === pivot) {
      equal.push(element);
    } else {
      greater.push(element);
    }
  }

  // 对小于基准值和大于基准值的部分递归排序
  return [...quickSort(less), ...equal, ...quickSort(greater)];
}

总结

熟练掌握JavaScript面试高频手撕题对于提升面试通过率至关重要。本文介绍了五道经典面试题,包括数组去重、数组扁平化、斐波那契数列生成、冒泡排序和快速排序。掌握这些解题思路,将助你自信应对面试,轻松斩获offer!