// 最简单数组去重法/*
* 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中
* IE8以下不支持数组的indexOf方法
* */function uniq(array){    
       var temp = []; //一个新的临时数组        for(var i = 0; i < array.length; i++){        
           if(temp.indexOf(array[i]) == -1){                temp.push(array[i]);            }        }    
       return temp; }
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){    
   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']); 假如需要按照属性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} ];

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注