js去重的两种方法

去重

去重方法和思路也很多,这里就介绍两种吧。

方法一:
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';

这里解释太多,好像有点啰嗦了 - -!

转载于:https://www.cnblogs.com/moxiaowohuwei/p/7448891.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值