返回

前端常见笔试题:优化解法,助你提升编码能力

前端

  1. 数组去除重复元素

给定一个包含重复元素的数组,请编写代码将其中的重复元素去除,并以升序输出。

const removeDuplicates = (arr) => {
  return [...new Set(arr)].sort((a, b) => a - b);
};

// 测试
const arr = [1, 2, 3, 4, 5, 1, 2, 3];
console.log(removeDuplicates(arr)); // 输出:[1, 2, 3, 4, 5]

2. 将数组扁平化且去除重复的元素,最后升序输出

给定一个包含嵌套数组的数组,请编写代码将其扁平化并去除重复的元素,最后以升序输出。

const flattenAndRemoveDuplicates = (arr) => {
  const flatArray = arr.flat();
  return [...new Set(flatArray)].sort((a, b) => a - b);
};

// 测试
const arr = [[1, 2, 3], [4, 5, 1], [6, 7, 2], [3, 8, 9]];
console.log(flattenAndRemoveDuplicates(arr)); // 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

3. 实现深拷贝

给定一个对象,请编写代码实现其深拷贝。

const deepCopy = (obj) => {
  if (typeof obj !== "object" || obj === null) {
    return obj;
  }

  if (Array.isArray(obj)) {
    return obj.map((item) => deepCopy(item));
  }

  const newObj = {};
  for (const key in obj) {
    newObj[key] = deepCopy(obj[key]);
  }

  return newObj;
};

// 测试
const obj = {
  name: "John",
  age: 25,
  address: {
    city: "New York",
    state: "NY",
  },
  hobbies: ["coding", "gaming", "reading"],
};
const copyObj = deepCopy(obj);
console.log(copyObj);

4. 输入一个字符串,分割该字符串的每个字符然后重新排列,输出可能排列的所有方式,如:输入 'ab',输出 'ab' 'ba'

const permute = (str) => {
  if (str.length === 1) {
    return [str];
  }

  const permutations = [];
  for (let i = 0; i < str.length; i++) {
    const char = str[i];
    const remainingChars = str.substring(0, i) + str.substring(i + 1);
    const subPermutations = permute(remainingChars);
    for (let j = 0; j < subPermutations.length; j++) {
      permutations.push(char + subPermutations[j]);
    }
  }

  return permutations;
};

// 测试
console.log(permute("ab")); // 输出:['ab', 'ba']
console.log(permute("abc")); // 输出:['abc', 'acb', 'bac', 'bca', 'cab', 'cba']

5. 实现冒泡排序

给定一个数组,请编写代码实现冒泡排序算法。

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

  return arr;
};

// 测试
const arr = [5, 3, 1, 2, 4];
console.log(bubbleSort(arr)); // 输出:[1, 2, 3, 4, 5]

总结

本文汇总了前端常见的笔试题,并提供了优化的解法。希望这些解法能够帮助读者提高编码能力,并在面试中脱颖而出。持续学习和练习是提高编程能力的最佳途径,希望读者能够不断精进自己的技术水平。