13 个 JavaScript 面试难题的代码实现解析

2024-12-30 16:28:59   小编

13 个 JavaScript 面试难题的代码实现解析

在 JavaScript 领域,面试中常常会遇到一些具有挑战性的问题,这些问题不仅考验对基础知识的掌握,还检验解决实际问题的能力。以下是对 13 个常见面试难题的代码实现解析。

问题 1:实现一个简单的冒泡排序算法。

function bubbleSort(arr) {
  let n = arr.length;
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n - i - 1; j++) {
      if (arr[j] > arr[j + 1]) {
        let temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

问题 2:使用递归实现斐波那契数列。

function fibonacci(n) {
  if (n <= 1) {
    return n;
  } else {
    return fibonacci(n - 1) + fibonacci(n - 2);
  }
}

问题 3:实现一个函数,判断一个字符串是否为回文。

function isPalindrome(str) {
  let reversedStr = str.split('').reverse().join('');
  return str === reversedStr;
}

问题 4:写一个函数,计算一个数组中所有元素的平均值。

function averageOfArray(arr) {
  let sum = 0;
  for (let num of arr) {
    sum += num;
  }
  return sum / arr.length;
}

问题 5:实现一个函数,找出数组中的最大值。

function findMaxInArray(arr) {
  let max = arr[0];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
      max = arr[i];
    }
  }
  return max;
}

问题 6:用 JavaScript 实现一个简单的栈结构。

class Stack {
  constructor() {
    this.items = [];
  }

  push(element) {
    this.items.push(element);
  }

  pop() {
    if (this.items.length === 0) {
      return "Underflow";
    }
    return this.items.pop();
  }

  peek() {
    return this.items[this.items.length - 1];
  }

  isEmpty() {
    return this.items.length === 0;
  }
}

问题 7:实现一个函数,将字符串中的每个单词的首字母大写。

function capitalizeWords(str) {
  let words = str.split(' ');
  for (let i = 0; i < words.length; i++) {
    words[i] = words[i][0].toUpperCase() + words[i].slice(1);
  }
  return words.join(' ');
}

问题 8:写一个函数,实现深度克隆一个对象。

function deepClone(obj) {
  if (typeof obj!== 'object' || obj === null) {
    return obj;
  }

  let clone = Array.isArray(obj)? [] : {};

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key]);
    }
  }

  return clone;
}

问题 9:实现一个函数,去除数组中的重复元素。

function removeDuplicates(arr) {
  return Array.from(new Set(arr));
}

问题 10:用 JavaScript 实现一个简单的队列结构。

class Queue {
  constructor() {
    this.items = [];
  }

  enqueue(element) {
    this.items.push(element);
  }

  dequeue() {
    if (this.items.length === 0) {
      return "Underflow";
    }
    return this.items.shift();
  }

  front() {
    return this.items[0];
  }

  isEmpty() {
    return this.items.length === 0;
  }
}

问题 11:实现一个函数,判断一个数是否为质数。

function isPrime(num) {
  if (num <= 1) {
    return false;
  }

  for (let i = 2; i * i <= num; i++) {
    if (num % i === 0) {
      return false;
    }
  }

  return true;
}

问题 12:写一个函数,计算两个日期之间的天数差。

function daysBetweenDates(date1, date2) {
  let oneDay = 24 * 60 * 60 * 1000;
  return Math.round(Math.abs((date1 - date2) / oneDay));
}

问题 13:实现一个函数,将一个数组展平。

function flattenArray(arr) {
  return arr.reduce((acc, cur) => acc.concat(Array.isArray(cur)? flattenArray(cur) : cur), []);
}

通过对以上 13 个 JavaScript 面试难题的代码实现解析,希望能帮助您更好地应对面试中的挑战,提升自己的编程能力。

TAGS: 代码解析 面试准备 JavaScript 代码 JavaScript 面试难题

欢迎使用万千站长工具!

Welcome to www.zzTool.com