3道初级js面试题

377 阅读3分钟

「这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

作者: Michael Pautov 译者:前端很美 来源:hackernoon

js和面试

自js诞生的25年来,已经发生了很多的改变,现在已经是世界最流行开发语言之一,说js是web开发最主要的语言也不为过。由于25年来的发展,js的面试也没有那么简单,有的时候还挺难的。不管面试者的水平如何,编码测试,都是面试中比较重要的一部分。本文将列举3个初级js开发最常见的3道题。

删除数组的重复项

删除数组的重复项是常见的js面试题之一,给定一个包含重复项的js数组,要求剔除重复项,例如:

let arr = [1, 2, 2, 3, 2, 3, 4, 5, 4, 1, 4, 5]

移除后的结果是:

let arr = [1, 2, 3, 4, 5]

有很多解决的办法,最简洁的解法是使用set:

let arr = [1, 2, 2, 3, 2, 3, 4, 5, 4, 1, 4, 5];
let output = [...new Set(arr)];
console.log(output); //[1, 2, 3, 4, 5]

另一种解法是使用filter()方法和indexOf()方法:

let arr = [1, 2, 2, 3, 2, 3, 4, 5, 4, 1, 4, 5];
let result = arr.filter((item, index) => {
  return arr.indexOf(item) == index;
});
console.log(result); //[1, 2, 3, 4, 5]

这个解法秘密就是indexOf()方法,该方法返回元素所在的索引位置而且仅返回第一次出现的位置,例如元素1在0和9的位置分别出现了一次,但是indexOf仅返回0,这意味着无论数组含有某个元素多少次,只会匹配到一次,所以每个元素只会被添加到结果数组中去一次。

检测字符串是不是回文字符串

当一个字符串的逆序和他本身完全相同时,它就是回文字符串,比如madam就是回文字符串,因为它的逆序字符串和他自身相同,而car 就不是回文字符串,这也是比较常见的初级开发者的面试题,因为他和反转值相关。
一个常见的解法是反转该字符串并和原始字符串相比对。首先使用lowerCase()方法把每个字母转化为小写字母,然后使用split()方法把字符串转化为数组,因为reverse()方法只能用于数组,然后再用join方法把他重新转化为字符串。最后检测新得到的字符串是否和原始字符串相同。

let string = "madam";
string = string.toLowerCase();
let reversedString = string.split("").reverse().join("");
console.log(reversedString); //madam
if (string === reversedString) {
  console.log(`${string} is palindrome`);
} else {
  console.log(`${string} is NOT palindrome`);
}

写出一个数字的阶乘

虽然阶乘用笔很容易算出来,比如5的阶乘等于120,方法是用5乘以4再乘以3再乘以2再乘以1,但是用代码表示这个过程并没有那么容易。
一个解法时使用while循环

let numberber = 5;
let sum = number;
while (number > 1) {
  number = number - 1;
  sum = sum * number;
}

console.log(sum); //120

给定的数字先递减,然后乘以原始值,直到递减为1,结果虽然时正确的,但是建议不要用这个解法,因为面试官可能是要考察递归的知识。

阶乘的面试题更期望用递归的思想来解答

function recursiveFunction(number) {
  if (number == 1) {
    return 1;
  }

  return number * recursiveFunction(number - 1);
}

console.log(recursiveFunction(5));

递归函数用于寻找给定数字的阶乘,每次调用递归函数,给定的数字将递减到1,最终返回给定数字的阶乘。

总结

以上的三个常见的初级开发者的面试题,请记住,面试官注重的是逻辑能力,面试官期望以效率最高的解法解决问题,主要目的是考察编程知识和技巧,例如第三题,虽然可以用while解答,但是使用递归的解法显得面试者的有更好的知识和技巧。