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了