1. 程式人生 > 實用技巧 >分享陣列去重的五種方式

分享陣列去重的五種方式

陣列去重的五種方式

<script>
      // 1 indexOf()  陣列中查詢元素的第一個索引,有返回值,沒有返回 -1
      let arr = [1, 2, 3, 4, 3, 2, 4, 6, 8, 6];
      let newArr = [];
      function deduplication(array) {
        for (let i = 0; i < array.length; i++) {
          // 在新陣列中查詢 去重陣列的每個值 indexOf()
          if (newArr.indexOf(array[i]) === -1) {
            newArr.push(array[i]);
          }
        }
        return newArr;
      }
      const res = deduplication(arr);
      console.log(res);

      // 2, sort 先把陣列 排序,相同的元素在一起,再進行前後元素的比較,
     // 如果前後值不相等,把後值push到新陣列中
      let arr = [1, 2, 3, 4, 3, 2, 4, 6, 8, 6];
      let newArr = [];
      function deduplication(array) {
        arr = arr.sort();
        let newArr = [arr[0]]; // 先把第一陣列的元素賦值給新陣列
        for (let i = 1; i < array.length; i++) {
          if (array[i - 1] !== array[i]) {
            newArr.push(array[i]); // 這樣就不能獲得第一個元素
          }
        }
        return newArr;
      }
      const res = deduplication(arr);
      console.log(res);

      // 3 filter  採用過濾器 返回true 把當前值存放到新陣列中 false不存放 ,
        // 然後利用 indexOf(index ,0(從那個位置開始)) 查詢陣列中元素的第一個索引值
      let arr = [1, 2, 3, 4, 3, 2, 4, 6, 8, 6];
      let newArr = [];
      function deduplication(array) {
        newArr = arr.filter((item, index, array) => {
          // 查詢陣列中 元素的第一個索引值 ,如果有重複的 比較索引值時,
        // 僅僅拿元素的第一個索引值來與 filter中的item,的index 進行比較,肯定不相等 返回false
          return array.indexOf(item, 0) === index;
        });
        return newArr;
      }
      const res = deduplication(arr);
      console.log(res);

      // 4 includes 查詢陣列中是否包含某一個值,包含返回true,否則返回false
      let arr = [1, 2, 3, 4, 3, 2, 4, 6, 8, 6];
      let newArr = [];
      function deduplication(array) {
        for (let i = 0; i < array.length; i++) {
          // 查詢 新陣列中是否包含 需要去重陣列的每個元素 不包含 取反,然後把改元素push到新陣列
          if (!newArr.includes(array[i])) {
            newArr.push(array[i]);
          }
        }
        return newArr;
      }
      const res = deduplication(arr);
      console.log(res);

      // 5, // [Array.from()] :把偽陣列或可迭代物件轉換為陣列  
            //  [new Set()] :把陣列中重複的值去掉,返回一個Set 例項物件
      let arr = [1, 2, 3, 4, 3, 2, 4, 6, 8, 6];
      let newArr = [];
      function deduplication(array) {
        // 把陣列去重 
        const setter = new Set(array)
        // 把 物件轉換為 陣列
        newArr = Array.from(setter)
        return newArr;
      }
      const res = deduplication(arr);
      console.log(res);
    </script>

有什麼問題小夥伴們可以及時指出,謝謝