js數組去除重復數據


1、遍歷數組法
建立一個新數組,然后循環遍歷要去重的數組,每次判斷新數組不包含舊數組的值時(新數組用indexOf方法檢索舊數組的值返回結果等於-1)將該值加入新數組。

let oldArr = [1, 2, 3, 4, 5, 5 , 6, 7, 8, 2, 3];
let newArr = unique(oldArr);

function unique(arr){
  let hash=[];
  for (let i = 0; i < arr.length; i++) {
    if(hash.indexOf(arr[i]) === -1){
      hash.push(arr[i]);
    }
    }
      return hash;
}

2、數組下標判斷法
與第一種方法類似,先遍歷,然后判斷當前數組的第i項在數組中第一次出現的位置是否與i相等,不是則說明重復,忽略,不加入新數組。

let oldArr = [1, 2, 3, 4, 5, 5 , 6, 7, 8, 2, 3];
let newArr = unique(oldArr);

function unique(arr){
let hash=[];
  for (let i = 0; i < arr.length; i++) {
    if(arr.indexOf(arr[i]) === i){
      hash.push(arr[i]);
    }
  }
  return hash;
}

3、排序后判斷
對數組進行排序后,將新數組的最后一個值與舊數組的當前值進行比較,如果相等說明重復,不相等則添加至新數組。

function unique(arr){
  arr.sort();
  let hash = [arr[0]];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] != hash[hash.length-1]) {
      hash.push(arr[i]);
    }
  }
  return hash;
}

4、es6的Set去重
Set類型:ES6提供了新的數據結構Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。
Set本身是一個構造函數,用來生成Set數據結構。

所以我們可以直接用Set來處理數組,但是處理完后可以用Array.form方法或者擴展函數把它重新轉回數組,不然得到的是Set類型,對於一些有類型判斷的地方是不通過的。

4.1、 Array.from轉換Set類型為Array
let oldArr = [1, 2, 3, 4, 5, 5 , 6, 7, 8, 2, 3];
let newArr = new Set(oldArr);
console.log(newArr);
console.log(newArr instanceof Array); // 此時是Set類型,不是Array
newArr = Array.from(newArr);
console.log(newArr instanceof Array);

4.2、 擴展函數轉換Set類型為Array
let oldArr = [1, 2, 3, 4, 5, 5 , 6, 7, 8, 2, 3];
let newArr = [...new Set(oldArr)]; // 這個方法最簡便


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM