js数组去重

来源:互联网 发布:昆明询知培训中心av2类 编辑:程序博客网 时间:2024/05/16 08:50
最近在工作中遇到数组中元素是的对象且需要去重的问题,在网上查找到的解决办法有很多,这里挑选了一种比较靠谱的方法,与大家分享一下,代码如下:
Array.prototype.arrUniq = function() {var temp,arrVal, array = this,arrClone = array.concat(),//克隆数组typeArr = {//数组原型'obj' : '[object Object]','fun' : '[object Function]','arr' : '[object Array]','num' : '[object Number]'    },ent = /(\u3000|\s|\t)*(\n)+(\u3000|\s|\t)*/gi;//空白字符正则//把数组中的object和function转换为字符串形式for(var i = arrClone.length; i--;){arrVal = arrClone[i];temp = Object.prototype.toString.call(arrVal);if(temp == typeArr['num'] && arrVal.toString() == 'NaN'){arrClone[i] = arrVal.toString();}if(temp == typeArr['obj']){arrClone[i] = JSON.stringify(arrVal);}if(temp == typeArr['fun']){arrClone[i] = arrVal.toString().replace(ent,'');}}//去重关键步骤for (var i = arrClone.length; i--;) {  arrVal = arrClone[i];  temp = Object.prototype.toString.call(arrVal);  if(temp == typeArr['arr']) arrVal.arrUniq();//如果数组中有数组,则递归if (arrClone.indexOf(arrVal) != arrClone.lastIndexOf(arrVal)) {//如果有重复的,则去重array.splice(i,1);    arrClone.splice(i, 1);  }  else{  if(Object.prototype.toString.call(array[i]) != temp){  //检查现在数组和原始数组的值类型是否相同,如果不同则用原数组中的替换,原因是原数组经过了字符串变换  arrClone[i] = array[i];  } }    }    return arrClone;} 
1 0
原创粉丝点击