如题,这算是一个比较经典的面试题了吧.在日常开发中也会经常遇到.研究一下还是很有价值的,让我们剖析一下.
随意定义一个数组,比如
1 | var arr = [1,2,2,3,4]; |
arr[1]和arr[2]都为2,我们只保留一个。
在解决这个问题之前我们了解一下一种结构叫做”哈希表”,类似这种:
1 | var hash_example = { |
怎么样,并不陌生吧,我们最熟悉的键值对形式。刚才那个arr数组有五个元素,我们可以给他对应的做一个五个元素的hash表,让他的每个元素作为hash表的”键”,这样:
1 | var hash_example = { |
在hash_example中有两个重复的项。我们如果把每个键的值用true和false表示,第一次粗现就标记为true,第二次就标记为false,我们只需要去掉键值为false的项,然后把存下来的键放到数组里就ok了。
1 | var hash_example = { |
利用这个原理,我们首先定义一个空数组来存放去重之后的结果
1 | var newArr = []; |
然后定义一个hash表结构
1 | var hash = {}; |
遍历数组,构建哈希表,并得出新数组
1 | for(var i=0;i<arr.length;i++){ |
大功告成。
西泊浪人©blog.western-ranger.com