不论是招聘面试或是新项目开发设计,数组去重全是一个普遍的难题。今日,老k为我们汇总了几类有效的列阵反复数据信息清除方式。

ES5方式:

最先,应用2个循环系统,随后拼凑拷贝(最常见于ES5)。

function unique(arr){ if(toString.call(arr) !== "[object Array]"){ console.log('务必为二维数组'); return ; } for(var i=0; i

基本原理:两层循环系统,表层循环系统因素,里层循环系统较为值。假如值同样,请删掉此值。

优势:兼容模式强。

缺陷:NaN和目标目标不可以反复。当信息量比较大时,高效率不高。

第二,应用二维数组,排列的排序算法,除去反复项。

function unique(arr){ if (toString.call(arr) !== "[object Array]"){ console.log('务必为二维数组'); return; } arr = arr.sort() var new_array = [arr[0]]; for(var i =1; i

基本原理:应用sort()排序算法,随后依据排列結果解析xml较为邻近原素。

优势:兼容模式强,逻辑性简易,非常容易了解。

缺陷:NaN和目标目标不可以反复。

三是运用目标特性不可以同样的特点开展去重复,关键应用hasOwnProperty。

function unique(arr){ if (toString.call(arr) !== "[object Array]"){ console.log('务必为二维数组'); return; } var obj = {}; var new_arr = []; for(var i = 0; i< arr.length; i ){ if(!obj.hasOwnProperty(typeof arr[i] arr[i])){ new_arr.push(arr[i]); obj[typeof arr[i] arr[i]] = true; } } return new_arr}var arr = [2,2,'a','a',true,true,'true','true',false,false,'false','false',undefined,undefined,null,null,NaN,NaN,'NaN',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, NaN, "NaN", 0, {…}]

基本原理:新创建空目标,空二维数组,解析xml总体目标二维数组。假如原素并不是目标的键,则将原素加上到新二维数组中,并且为键取值。假如它早已是目标的键,则被忽视。应用typeof将布尔值与“true”,“false”,NaN和“NaN”区别起来。

优势:能够拷贝多种类型的数据信息。

缺陷:都还没。

ES6方式:

1.运用ES6的Set目标的性能开展反复删掉。

function unique(arr){ if(!Array.isArray(arr)){ console.log('务必为二维数组'); return; } return Array.from(new Set(arr)) //或是用拓展操作符转换为二维数组 return [...new Set(arr)]};var arr = [2,2,'a','a',true,true,'true','true',false,false,'false','false',undefined,undefined,null,null,NaN,NaN,'NaN',0,0,{},{}];unique(arr); // [2, "a", true, "true", false, "false", undefined, null, NaN, "NaN", 0, {...},{...}]

基本原理:ES6的Set目标用以全自动清除反复,根据ES6二维数组的from方式或拓展操作符将Set目标变换为Array。

优势:无论兼容模式怎样,此办法的编码至少。

缺陷:这一方式不可以拷贝目标目标,因此要考虑到兼容模式。

次之,应用ES6数组方法indexOf清除反复项。

function unique(arr){ if(!Array.isArray(arr)){ console.log('务必为二维数组'); return; } var new_array = []; for(var i = 0; i< arr.length; i ){ if (new_array.indexOf(arr[i]) === -1){ new_array.push(arr[i]) } } return new_array;};var arr = [2,2,'a','a',true,true,'true','true',false,false,'false','false',undefined,undefined,null,null,NaN,NaN,'NaN',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, NaN, NaN, "NaN", 0, {…}, {…}]

基本原理:新创建一个空的結果二维数组,用以循环系统原二维数组,应用indexOf方式分辨結果二维数组中是不是存有当今原素。如果有一样的值,绕过它;假如不一样,将其送入二维数组。

优势:应用ES6列阵的新方式逻辑性简易,便于了解。

缺陷:NaN和目标目标不可以反复,必须考虑到兼容问题。

第三,应用ES6数组方法包含删除重复项。

function unique(arr){ if(!Array.isArray(arr)){ console.log('务必为二维数组'); return; } var new_array = []; for(var i = 0; i< arr.length; i ){ if ( !new_array.includes(arr[i]) ){ new_array.push(arr[i]) } } return new_array;};var arr = [2,2,'a','a',true,true,'true','true',false,false,'false','false',undefined,undefined,null,null,NaN,NaN,'NaN',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, NaN, "NaN", 0, {…}, {…}]

基本原理:新创建空二维数组new_array,解析xml总体目标二维数组,应用includes方式分辨总体目标二维数组的原素是不是在新二维数组中,假如没有,则将原素加上到新二维数组中,有则忽视。

优势:应用ES6列阵的新方式逻辑性简易,便于了解。

缺陷:不可以拷贝目标,必须考虑到兼容模式。

第四,应用ES6的过滤装置和数据库索引来删除重复项。

function unique(arr){ if(!Array.isArray(arr)){ console.log('务必为二维数组'); return; } return arr.filter(function(item, index, arr){ return arr.indexOf(item, 0) === index; });}var arr = [2,2,'a','a',true,true,'true','true',false,false,'false','false',undefined,undefined,null,null,NaN,NaN,'NaN',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, "NaN", 0, {…}, {…}]

基本原理:给filter一个挑选标准,获得初始二维数组中原素的第一个数据库索引,假如相当于当今数据库索引值,则回到当今原素。

优势:应用ES6列阵的新方式逻辑性简易,便于了解。

缺陷:不可以拷贝object和NaN,必须考虑到兼容模式。

第五,应用ES6的Map数据类型开展反复删掉。

function unique(arr){ if(!Array.isArray(arr)){ console.log('务必为二维数组'); return; } let map = new Map(); let new_array = new Array(); for(let i = 0; i

基本原理:建立一个新的二维数组,解析xml总体目标二维数组,假如原素没有地形图中,则将其加上到新二维数组中。

优势:选用ES6列阵新的算法设计,逻辑性简单易懂。

缺陷:不可以拷贝目标,必须考虑到兼容模式。

第六,应用ES6的reduce和includes清除反复项。

function unique(arr){ if(!Array.isArray(arr)){ console.log('务必为二维数组'); return; } return arr.reduce( (prev, cur) => prev.includes(cur) ? prev : [...prev,cur], []);}var arr = [2,2,'a','a',true,true,'true','true',false,false,'false','false',undefined,undefined,null,null,NaN,NaN,'NaN',0,0,{},{}];unique(arr); //[2, "a", true, "true", false, "false", undefined, null, NaN, "NaN", 0, {…}, {…}]

基本原理:建立一个新的二维数组,解析xml总体目标二维数组,假如原素没有地形图中,则将其加上到新二维数组中。

优势:运用ES6二维数组的reduce,将初值设定为空二维数组,迭代更新分辨当今原素是不是在前一个二维数组中,如果是,回到前一个二维数组,不然,将当今原素加上到前一个原素中,随后回到新的二维数组。

缺陷:不可以拷贝目标,必须考虑到兼容模式。

评论(0条)

刀客源码 游客评论