< 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, {…}, {…}] 原理:新建一個(gè)空的結(jié)果數(shù)組,for 循環(huán)原數(shù)組,利用indexOf方法判斷結(jié)果數(shù)組是否存在當(dāng)前元素,如果有相同的值則跳過(guò),不相同則push進(jìn)數(shù)組 。
優(yōu)點(diǎn):利用ES6數(shù)組的新方法,邏輯簡(jiǎn)單,容易理解 。
缺點(diǎn):不能去重NaN,object對(duì)象,需要考慮兼容問(wèn)題 。
三、利用ES6的數(shù)組方法includes去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必須為數(shù)組\\\'); 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, {…}, {…}] 原理:創(chuàng)建個(gè)新的空數(shù)組new_array,遍歷目標(biāo)數(shù)組,利用includes方法判斷目標(biāo)數(shù)組的元素是否在新數(shù)組里,如果沒(méi)有,將元素添加到新數(shù)組中,如果有則忽略 。
優(yōu)點(diǎn):利用ES6數(shù)組的新方法,邏輯簡(jiǎn)單,容易理解 。
缺點(diǎn):不能去重object對(duì)象,需要考慮兼容性 。
四、利用ES6的filter和indexOf去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必須為數(shù)組\\\'); 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一個(gè)過(guò)濾條件,獲取元素在原始數(shù)組的第一個(gè)索引,如果等于當(dāng)前索引值,返回當(dāng)前元素 。
優(yōu)點(diǎn):利用ES6數(shù)組的新方法,邏輯簡(jiǎn)單,容易理解 。
缺點(diǎn):不能去重object對(duì)象和NaN,需要考慮兼容性 。
五、利用ES6的Map數(shù)據(jù)格式去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必須為數(shù)組\\\'); return; } let map = new Map(); let new_array = new Array(); for(let i = 0; i原理:創(chuàng)建一個(gè)新數(shù)組,遍歷目標(biāo)數(shù)組,如果元素沒(méi)有在Map里,則添加到新數(shù)組 。
優(yōu)點(diǎn):利用ES6數(shù)組的新數(shù)據(jù)結(jié)構(gòu),邏輯簡(jiǎn)單,容易理解 。
缺點(diǎn):不能去重object對(duì)象,需要考慮兼容性 。
六、利用ES6的reduce和includes去重
function unique(arr){ if(!Array.isArray(arr)){ console.log(\\\'必須為數(shù)組\\\'); 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, {…}, {…}] 原理:創(chuàng)建一個(gè)新數(shù)組,遍歷目標(biāo)數(shù)組,如果元素沒(méi)有在Map里,則添加到新數(shù)組 。
猜你喜歡
- php怎么把數(shù)組合成字符串 php數(shù)組拼接成字符串
- 最實(shí)用的2種方法 php數(shù)組轉(zhuǎn)字符串函數(shù)有哪些
- 西瓜的保存方法最簡(jiǎn)單 西瓜怎么保存
- 油條怎么炸 最簡(jiǎn)單的炸油條方法
- 荸薺最簡(jiǎn)單的吃法是 一看就學(xué)會(huì)了
- 君子蘭葉片不會(huì)能剪去重生嗎
- 部落沖突13本打法 最簡(jiǎn)單的部落沖突13本打法
- 除鞋臭的辦法有哪些
- 最簡(jiǎn)單的混凝土怎么做 制作混凝土的方法
- 海南木瓜最簡(jiǎn)單的食用方法 海南木瓜怎么吃
