技术文摘
13 个 JavaScript 面试难题的代码实现解析
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 面试难题