js数组去重有经典的 几种方法html
但当数组元素是对象时,就不能简单地比较了,须要以某种方式遍历各值再判断是否已出现。数组
由于:spa
1.若是是哈希判断法,对象做哈希表的下标,就会自动转换成字符型类型,从而致使全部元素都相等,这时判断方法再也不有意义。通常最后数组就只剩一个code
2.若是是直接比较法,则由于对象在内存中是按引用访问的,属性值相同的对象也不会相等,简单的直接判断再也不有意义。通常最后数组仍是原样htm
因此就须要进行值的比较对象
固然了,也能够换着法来将相应对象转为字符串(不是默认的那种[object Object])blog
举个例子:内存
var array = [ {a:1,b:2,c:3,d:4}, {a:11,b:22,c:333,d:44}, {a:111,b:222,c:333,d:444}, {a:11,b:22,c:33,d:44}, {a:11,b:22,c:33,d:444} ];
假如须要按照属性a,b为数组进行去重字符串
那么最后将获得get
array = [ {a:1,b:2,c:3,d:4}, {a:11,b:22,c:333,d:44}, {a:111,b:222,c:333,d:444} ];
//将对象元素转换成字符串以做比较 function obj2key(obj, keys){ var n = keys.length, key = []; while(n--){ key.push(obj[keys[n]]); } return key.join('|'); } //去重操做 function uniqeByKeys(array,keys){ var arr = []; var hash = {}; for (var i = 0, j = array.length; i < j; i++) { var k = obj2key(array[i], keys); if (!(k in hash)) { hash[k] = true; arr .push(array[i]); } } return arr ; }
//进行去重 var arr = uniqeByKeys(array,['a','b']);
这种方式暂时还能够,固然了若是出现那种属性和值组合正好有出现xx相同的那就xx了