超實用的JS數組去重

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能夠實現,不影響功能實現~對象

相關文章
相關標籤/搜索