js 數組去重
阿新 • • 發佈:2017-08-30
content return i++ div spa index 設置 pan 跳過
1、前言
去重方法千千萬萬,你要哪一種
2、es系列方法
2.1、es6 Set()方法
介紹:ES6提供了新的數據結構Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。
Set函數可以接受一個數組(或類似數組的對象)作為參數,用來初始化
new Set(test);//test為去重的數組
2.2、es7 includes
Array.prototype.includes方法返回一個布爾值,表示某個數組是否包含給定的值,與字符串的includes方法類似。該方法屬於 ES7 ,但 Babel 轉碼器已經支持
unique4 (arr) { let newArr = [arr[0]]; for(index of arr){ if(!newArr.includes(index)){ newArr.push(index); } } return newArr; }
3、常規去重
思路:
- 構建一個新的數組存放結果,設置狀態值
- 從原數組中循環取出一個元素,與結果數組對比
- 若結果數組中沒有該元素,則改變狀態值
- 通過判斷狀態值進行結果數組的存儲
核心代碼:
unique1 (arr) { let newArr = [arr[0]];//現將第一個數加入到新數組中; arr.shift(); let result= true;//判斷是否重復,默認不存在重復true for(index of arr) { for(res of newArr) { if(res === index){ result = false;//存在重復改變狀態值 break; } } if(result){ newArr.push(index);//不存在重復則加入新數組 } result = true;//循環解析重新改變狀態值} return newArr; },
3、排序去重
思路:
- 對數組進行排序(由於打亂了數組結構,不適用於需要保留原數組順序的)
- 判斷第 i 個數組元素是否和 i-1 個數組元素相同,
- 如果不相同,則表示新數組中不存在該元素,可以加入
核心代碼:
unique2 (arr) { arr.sort();//對數組進行排序 let newArr = [arr[0]];//現將第一個數加入到新數組中;這裏移除 let len = arr.length; //跳過數組第一個元素,從第二個開始 for(let i = 1; i < len; i++) { //如果前後不相同,則不存在重復 if(arr[i] !== arr[i-1]) { newArr.push(arr[i]); } } return newArr; },
5、對象去重
思路:
- 創建一個新數組存儲結果,空對象將這個值作為屬性並賦值,進行存儲
- 循環取出數組元素去對象中訪問對應屬性,
- 如果存在則重復,不能加入數組
核心代碼:
unique3 (arr) { let newArr = []; let newObj = {};//定義一個對象,通過對象來獲取值 for(index of arr) { //如果這個屬性不存在,則可以加入數組,並復制 if(!newObj[index]) { newArr.push(index); newObj[index] = 1; } } return newArr; }
6、結語
去重的方式還有很多,等待你去探索。。。
js 數組去重