返回
前端常见笔试题:优化解法,助你提升编码能力
前端
2023-12-31 18:25:28
- 数组去除重复元素
给定一个包含重复元素的数组,请编写代码将其中的重复元素去除,并以升序输出。
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]
总结
本文汇总了前端常见的笔试题,并提供了优化的解法。希望这些解法能够帮助读者提高编码能力,并在面试中脱颖而出。持续学习和练习是提高编程能力的最佳途径,希望读者能够不断精进自己的技术水平。