数组去重,很多时候都会用到,在具体项目中因为场景确定,很容易写出一个简单的去重方法,但大多是否具有针对性,没法适用于各类,一劳永逸。当然此处的场景所说的去重指的是去除内容大致相同的数据,不管是否同一个引用。如下这段代码,如果希望输出的是[[1],{a:2},{a:1},[2]]letobj={a:1};letarr=[2];lettest=[[1],[1],{a:2},{a:2},obj,obj,arr,arr];Array.prototype.unique=function(){...}console.log(test.unique());通常我们利用Set和Array互转实现去重,但是该方式在判断引用类型时,并没那么给力,只有相同的引用才会被判定为相等。console.log([...newSet(test)]);//[[1],[1],{a:2},{a:2},{a:1},[2]];如果采用对象的方式,对付普通的数据还好,碰上这种情况也是无能为力Array.prototype.unique=function(){varres=[];varjson={};for(vari=0;iif(!json[this[i]]){ res.push(this[i]);json[this[i]]=true;}}returnres;}console.log(test.unique());//[[1],{a:2},[2]]非常神奇的是{a:1}竟然不见了当然,如果采用极端点的方式只对引用类型的值先JSON.string(),再来做对比,好像可以,准确的说对简单且狭义的对象类型有效,因为File、Stack、HTMLElement、class、function等Object类型的等值判断没有json数据或字符串那般简单。
慕先生4543998
慕村225694
慕莱坞森
相关分类