JS 数组去重(数组元素是对象的情况)

2023-05-24 0 558

JS 数组去重(数组元素是对象的情况)

// 最简单字符串去母汪氏/* * 增建科跃蛛属字符串,结点传至字符串,值无此新字符串就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(!(kin 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} ];

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务