JS 数组去重(数组元素是对象的情况)

js数组去重有经典的 几种方法

但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现。

因为:

1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致所有元素都相等,这时判断方法不再有意义。一般最后数组就只剩一个

2.如果是直接比较法,则因为对象在内存中是按引用访问的,属性值相同的对象也不会相等,简单的直接判断不再有意义。一般最后数组还是原样

 

所以就需要进行值的比较

当然了,也可以换着法来将相应对象转为字符串(不是默认的那种[object Object])

 

举个例子:

[javascript]  view plain  copy
  1. var array = [  
  2.     {a:1,b:2,c:3,d:4},  
  3.     {a:11,b:22,c:333,d:44},  
  4.     {a:111,b:222,c:333,d:444},  
  5.     {a:11,b:22,c:33,d:44},  
  6.     {a:11,b:22,c:33,d:444}  
  7.     ];  
方法为

[javascript]  view plain  copy
  1. //将对象元素转换成字符串以作比较  
  2. function obj2key(obj, keys){  
  3.     var n = keys.length,  
  4.         key = [];  
  5.     while(n--){  
  6.         key.push(obj[keys[n]]);  
  7.     }  
  8.     return key.join('|');  
  9. }  
  10. //去重操作  
  11. function uniqeByKeys(array,keys){  
  12.     var arr = [];  
  13.     var hash = {};  
  14.     for (var i = 0, j = array.length; i < j; i++) {  
  15.         var k = obj2key(array[i], keys);  
  16.         if (!(k in hash)) {  
  17.             hash[k] = true;  
  18.             arr .push(array[i]);  
  19.         }  
  20.     }  
  21.     return arr ;  
  22. }  

[javascript]  view plain  copy
  1. //进行去重  
  2. var arr = uniqeByKeys(array,['a','b']);  

假如需要按照属性a,b为数组进行去重

那么最后将得到

[javascript]  view plain  copy
  1. array = [  
  2.     {a:1,b:2,c:3,d:4},  
  3.     {a:11,b:22,c:333,d:44},  
  4.     {a:111,b:222,c:333,d:444}  
  5.     ];  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值