去重
去重方法和思路也很多,这里就介绍两种吧。
方法一:
1
2
3
4
5
6
7
8
9
10
11
|
function unique1(arr) {
var res = [],
len = arr.length;
for ( var i = 0; i < len; i++) {
if (res.indexOf(arr[i]) == -1) {
res.push(arr[i]);
}
}
return res;
} |
思路:利用了数组的indexOf()方法,此方法的目的是寻找存入参数在数组中第一次出现的位置,如果结果返回-1,说明还不存在,于是就可以保存起来了。实现这个方法的时候会遍历数组直到找到目标为止,比较耗时,速度方面要比借助hash表来实现慢。下文即将介绍~
方法二:
1
2
3
4
5
6
7
8
9
10
11
12
|
function unique2(arr) {
var res = [],
hash = {},
len = arr.length;
for ( var i = 0; i < len; i++) {
if (!hash[arr[i]]) { //如果不存在
hash[arr[i]] = true ; //记录下来
res.push(arr[i]); //保存起来
}
}
return res;
} |
思路:将数组中的值通过作为下标(key)的形式存入一个Object内,利用这个加以判断,最后达到去重目的。这里有必再写详细一点,因为最初的时候有点懵逼,一时没看懂,定义了一个对象hash={},然后判断的时候又是这样写hash[],让人感觉又有点像数组。。。其实很好理解的。先来看个小例子:
1
2
3
4
5
6
7
8
9
10
|
var hash = {
"name" : "xiaojiecong" ,
"sex" : "male"
}; console.log(hash.name); console.log(hash.sex); console.log(hash[ "name" ]);
console.log(hash[ "sex" ]);
|
其实想说明就是,有两种方式能得到对象字面量中的某个键名(key)的键值(value),第一种是用点连接,第二种是用中括号,所以看到上面hash[]这样写也不会觉得奇怪了。用点连接或中括号,这个也适用于元素操作属性这种场景,比如:
1
2
3
4
|
document.getElementsByTagName('div')[0].style.display = 'block'; document.getElementsByTagName('div')[0].style['display'] = 'block'; document.getElementsByTagName('input')[0].value ='123'; document.getElementsByTagName('input')[0]['value'] ='123'; |
这里解释太多,好像有点啰嗦了 - -!