JavaScript数组去重方法总结

92 阅读1分钟

这基本上算是一个老生常谈的问题了,也很基础,面试中问的可能性也很大,以下是我总结的一些方法,希望可以帮助到大家。

1、ES6中的set数据结构

let arr=[1,2,3,4,1,3,4,5];
//set中的成员具有唯一性,可以利用这一特性来去重
let newArr=[...new Set(arr)]
console.log(newArr)  //[1,2,3,4,5]

2、利用indexOf方法

let arr = [1, 2, 3, 4, 1, 2, 3, 5];
function unique(arr) {
  let tempArr = [];
  for (let i = 0; i < arr.length; i++) {
  // 判断新的数组中是否有当前值的下标
    if(tempArr.indexOf(arr[i])==-1){
        tempArr.push(arr[i])
    }
  }
  return tempArr;
}
console.log(unique(arr))   //[ 1, 2, 3, 4, 5 ]

3、利用filter+indexOf方法

let arr = [1, 2, 3, 4, 1, 2, 3, 5];
function unique(arr) {
  let tempArr = arr.filter((item,index)=>{
    // 判断当前值的下标是否等于自身的下标,如果不相等说明是重复的
    return arr.indexOf(item)===index
  })
  return tempArr;
}
console.log(unique(arr))   //[ 1, 2, 3, 4, 5 ]

4、利用Object键值对

let arr = [1, 2, 3, 4, 1, 2, 3, 5];
function unique(arr) {
  let obj = {};
  let tempArr = [];
  for (let i = 0; i < arr.length; i++) {
    if (!obj[arr[i]]) {
      tempArr.push(arr[i]);
      obj[arr[i]] = 1;
    } else {
      obj[arr[i]]++;
    }
  }
  return tempArr;
}
console.log(unique(arr)); //[ 1, 2, 3, 4, 5 ]

5、利用reduce方法

let arr = [1, 2, 3, 4, 1, 2, 3, 5];
function unique(arr) {
  let tempArr = arr.reduce((previousValue, currentValue) => {
    if (previousValue.indexOf(currentValue) == -1) {
      previousValue.push(currentValue);
    }
    return previousValue;
  }, []);
  return tempArr;
}
console.log(unique(arr)); //[ 1, 2, 3, 4, 5 ]

6、利用includes方法

let arr=[1,2,3,4,5,1,2,3,4]
function unique(arr){
    let tempArr=[];
    for(let i = 0 ;i <arr.length;i++){
        if(!tempArr.includes(arr[i])){
            tempArr.push(arr[i])
        }
    }
    return tempArr;
}
console.log(unique(arr))  //[1,2,3,4,5]

end