1、簡單的去重方法,利用數組indexOf方法數組
// 最簡單數組去重法 /* * 新建一新數組,遍歷傳入數組,值不在新數組就push進該新數組中 * IE8如下不支持數組的indexOf方法 * */ let ary = [1, 2, 3, 2, 2, 3, 4, 3, 4, 5]; // 數組去重 function unique(ary) { let newAry = []; for (let i = 0; i<ary.length; i++) { if (newAry.indexOf(ary[i]) === -1) { newAry.push(ary[i]); } } return newAry; } array = unique(ary);
console.log(array);
2、優化遍歷數組法優化
/*==數組去重==*/ let ary = [1, 2, 3, 2, 2, 3, 4, 3, 4, 5]; /* * 1.依次拿出數組中的每一項(排除最後一項:最後一項後面沒有須要比較的內容) * 2.和當前拿出項後面的每一項依次比較 * 3.若是發現有重複的,咱們把找到的這個重複項在原有數組中刪除掉(splice) */ //=>i<ary.length-1:不用拿最後一項 for (let i = 0; i < ary.length - 1; i++) { let item = ary[i]; //=>item:依次拿出的每一項 //=>i:當前拿出項的索引 //=>和當前項後面的每一項比較:起始索引應該是i+1 k < ary.length找到末尾依次比較 for (let k = i + 1; k < ary.length; k++) { //ary[k]:後面須要拿出來和當前項比較的這個值 if (item === ary[k]) { //=>相等:重複了,咱們拿出來的K這個比較項在原有數組中刪除 // ary.splice(k, 1); /* * 這樣作會致使數組塌陷問題:當咱們把當前項刪除後,後面每一項都要向前進一位,也就是原有數組的索引起生了改變,此時咱們k繼續累加1,下一次在拿出來的結果就會跳過一位 * 原數組 [1,2,3,4] * i=1 =>2 咱們把這一項幹掉,而後i++,i=2 * 原數組 [1,3,4] * i=2這一項是4,3這一項就錯過了 * ... */ ary.splice(k, 1);//=>刪除後不能讓k累加了 k--;//=>刪除後先減減,在加加的時候至關於沒加沒減 } } } console.log(ary);
3、對象鍵值法去重spa
let ary = [1, 2, 3, 2, 2, 3, 4, 3, 4, 5]; // 使用對象屬性名不重複的特色去重 let obj={}; let newAry = []; for (let i=0; i<ary.length; i++) { let item = ary[i]; if (typeof obj[item] === 'undefined') { // 若是obj[item]是undefined說明對象obj中還未存入鍵值item,咱們向newAry中加入item newAry.push(item) } obj[item] = item; } ary = newAry console.log(ary)
4、ES6中Set方法去重code
let ary = [1, 2, 2, 2, 1, 2, 3, 2, 3, 2, 1], console.log(Array.from(new Set(ary))); //=>基於ES6 SET實現去重 或者console.log([...new Set(ary)]);
我用let代替了var聲明變量,還未學ES6的同窗用var能夠實現,不影響功能實現~對象