js數組去重有經典的 幾種方法
但當數組元素是對象時,就不能簡單地比較了,需要以某種方式遍歷各值再判斷是否已出現。
因為:
1.如果是哈希判斷法,對象作哈希表的下標,就會自動轉換成字符型類型,從而導致所有元素都相等,這時判斷方法不再有意義。一般最后數組就只剩一個
2.如果是直接比較法,則因為對象在內存中是按引用訪問的,屬性值相同的對象也不會相等,簡單的直接判斷不再有意義。一般最后數組還是原樣
所以就需要進行值的比較
當然了,也可以換着法來將相應對象轉為字符串(不是默認的那種[object Object])
舉個例子:
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為數組進行去重
那么最后將得到
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了
