前端面试:手写代码技巧——数组去重与快速排序实现

4 下载量 86 浏览量 更新于2024-08-30 收藏 88KB PDF 举报
在JavaScript前端面试中,手写代码是一个常见的环节,旨在评估面试者的数据结构和算法基础。本篇文章主要讨论了两种数组去重的方法:基本的遍历和利用哈希表(对象)的方式。 1. **数组去重基础方法** - **基本遍历法**:`Array.prototype.unique`函数通过遍历数组,将未出现过的元素添加到新数组`result`中。这种方法简单直观,但当遇到不同类型的元素时(如字符串'1'和数字1),由于JavaScript的隐式类型转换,可能会导致错误,比如将两个不同的'1'视为同一个元素。解决这个问题的方法是首先检查元素类型,确保不重复存储相同类型的实例。 ```javascript Array.prototype.unique = function() { var result = [], hash = {}; this.forEach(function(v) { var type = typeof v; hash[v] || (hash[v] = []); if (hash[v].indexOf(type) === -1) { hash[v].push(type); result.push(v); } }); return result; } ``` 2. **利用哈希表去重**:另一种方法是使用对象作为哈希表,键是数组元素,值可忽略,重点在于检查键是否存在。同样,为了处理不同类型的元素,我们需要确保键的唯一性,即使用元素的类型作为辅助键。 ```javascript Array.prototype.unique = function() { var result = [], hash = {}; this.forEach(function(v) { var type = typeof v; if (!hash[type]) { hash[type] = []; } if (hash[type].indexOf(v) === -1) { hash[type].push(v); result.push(v); } }); return result; } ``` 3. **排序后去重**:另一种去重策略是先对数组进行排序,然后只将不同的元素添加到结果数组中。这种方法适用于对顺序有要求的情况,但不适合性能要求高的场景。 ```javascript Array.prototype.unique = function() { var result = [this[0]]; this.sort(); this.forEach(function(v) { if (v !== result[result.length - 1]) { result.push(v); } }); return result; } ``` 此外,文章还提到了快速排序的实现,虽然题目没有提供完整的代码,但这是一个经典的排序算法,面试者可能被要求手动编写非数组方法的版本。快速排序通常涉及递归地选择一个基准值,然后对数组进行分区操作,使得基准值左侧的元素都小于它,右侧的元素都大于它,然后对左右两部分递归执行相同的操作。 理解并能手写这些基础的算法和数据结构操作是前端开发者面试中的重要考察点,因为它们反映了开发者对编程基础和性能优化的理解。掌握这些技巧不仅可以提高面试表现,也有助于日常开发中的问题解决和代码优化。