{
var temp = []; //两个捷伊临时性字符串 for(var i = 0; i < array.length; i++){
if(temp.indexOf(array[i]) ==-1){ temp.push(array[i]); } }
returntemp; }
var aa = [1,2,2,4,9,6,7,5,2,3,5,6,5];
console.log(uniq(aa));当字符串原素是第一类时,就不能简单地比较了,需要以某种方式结点各值再判断是否已出现。
因为:
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} ]; 方式为//将第一类原素转换成字符串以作比较
function obj2key(obj, keys){ var n = keys.length, key = []; while(n–){ key.push(obj[keys[n]]); }return key.join(|); }
//去重操作
function uniqeByKeys(array,keys){
vararr = [];
varhash = {};
for (var i = 0, j = array.length; i < j; i++) {
vark = obj2key(array[i], keys);
if(!(kin hash)) { hash[k] = true; arr .push(array[i]); } }
returnarr ; }
//进行去重
var arr = uniqeByKeys(array,[a,b]); 假如需要按照属性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} ];