返回

手撕js手写题,从入门到进阶!掌握前端开发必备技能!

前端

在前端开发领域,JavaScript(JS)作为一门重要的编程语言,深受广大开发者的喜爱。想要成为一名合格的前端工程师,扎实的JS功底是必不可少的。为了帮助您提升JS编程能力,本文精选了3道经典JS手写题,从入门到进阶,一步步带领您掌握JS编程的精髓。

手撕3道JS手写题,从入门到进阶!

1. 字符串反转

给定一个字符串,请编写代码将其反转。

function reverseString(str) {
  // 检查输入是否有效
  if (typeof str !== "string") {
    throw new Error("Input must be a string.");
  }

  // 创建一个空字符串来存储反转后的字符串
  let reversedStr = "";

  // 从字符串末尾开始,依次将每个字符添加到反转后的字符串中
  for (let i = str.length - 1; i >= 0; i--) {
    reversedStr += str[i];
  }

  // 返回反转后的字符串
  return reversedStr;
}

// 测试代码
console.log(reverseString("Hello World!")); // 输出:"!dlroW olleH"

2. 斐波那契数列生成器

编写一个函数,生成斐波那契数列的前n项。

function fibonacciGenerator(n) {
  // 检查输入是否有效
  if (typeof n !== "number" || n < 1) {
    throw new Error("Input must be a positive integer.");
  }

  // 创建一个数组来存储斐波那契数列
  const fibonacciSequence = [0, 1];

  // 从第三项开始,计算并添加到数组中
  for (let i = 2; i < n; i++) {
    fibonacciSequence[i] = fibonacciSequence[i - 1] + fibonacciSequence[i - 2];
  }

  // 返回斐波那契数列
  return fibonacciSequence;
}

// 测试代码
console.log(fibonacciGenerator(10)); // 输出:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

3. 二分查找算法

给定一个有序数组和一个目标值,请编写代码使用二分查找算法查找目标值在数组中的位置。

function binarySearch(arr, target) {
  // 检查输入是否有效
  if (!Array.isArray(arr) || arr.length === 0 || typeof target !== "number") {
    throw new Error("Invalid input.");
  }

  // 确定数组的左右边界
  let left = 0;
  let right = arr.length - 1;

  // 在数组中查找目标值
  while (left <= right) {
    // 计算中间索引
    const mid = Math.floor((left + right) / 2);

    // 检查中间元素是否等于目标值
    if (arr[mid] === target) {
      return mid;
    } else if (arr[mid] < target) {
      // 目标值大于中间元素,将左边界移动到中间元素的右侧
      left = mid + 1;
    } else {
      // 目标值小于中间元素,将右边界移动到中间元素的左侧
      right = mid - 1;
    }
  }

  // 未找到目标值,返回-1
  return -1;
}

// 测试代码
const arr = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
const target = 11;
console.log(binarySearch(arr, target)); // 输出:5

结语

以上3道JS手写题涵盖了基础知识和进阶技巧,能够帮助您全面提升JS编程水平。通过反复练习这些题,您将掌握JS编程的精髓,为成为一名优秀的前端工程师打下坚实的基础。