Skip to content
快看这页儿写了啥...

JS 实现数组去重方法

题干

  • 数组去重

题解

Set && Array.from

SetES6 新增的数据结构,它可以存储不重复的值,Array.from 可以将类数组对象转换为数组,结合起来就可以实现数组去重。

js
let arr = [1, 2, 3, 4, 4, 5, 5];
function unique(arr) {
  return Array.from(new Set(arr));
}
console.log(unique(arr)); // [1, 2, 3, 4, 5]

indexOf && filter

indexOf 方法可以返回数组中某个元素的第一个索引,filter 方法可以根据条件过滤数组元素,结合起来就可以实现数组去重。

js
let arr = [1, 2, 3, 4, 4, 5, 5];
function unique(arr) {
  return arr.filter((item, index) => arr.indexOf(item) === index);
}
console.log(unique(arr)); // [1, 2, 3, 4, 5]

sort && reduce

sort 方法可以对数组进行排序,reduce 方法可以对数组进行累计操作,结合起来就可以实现数组去重。

js
let arr = [1, 2, 3, 4, 4, 5, 5];
function unique(arr) {
  return arr.sort().reduce((prev, cur) => {
    if (prev.length === 0 || prev[prev.length - 1] !== cur) {
      prev.push(cur);
    }
    return prev;
  }, []);
}
console.log(unique(arr)); // [1, 2, 3, 4, 5]

Map && forEach

MapES6 新增的数据结构,它可以存储键值对,forEach 方法可以遍历数组元素,结合起来就可以实现数组去重。

js
let arr = [1, 2, 3, 4, 4, 5, 5];
function unique(arr) {
  let map = new Map();
  let result = [];
  arr.forEach(item => {
    if (!map.has(item)) {
      map.set(item);
      result.push(item);
    }
  });
  return result;
}
console.log(unique(arr)); // [1, 2, 3, 4, 5]

双层循环 && splice

外层循环遍历数组元素,内层循环比较元素是否有相同的值,如果有则用 splice 方法删除重复元素。

js
let arr = [1, 2, 3, 4, 4, 5, 5];
function unique(arr) {
  for (let i = arr.length -1; i >=0; i--) {
    for (let j = i -1; j >=0; j--) {
      if (arr[i] === arr[j]) {
        arr.splice(j ,1);
      }
    }
  }
  return arr;
}
console.log(unique(arr)); // [1 ,2 ,3 ,4 ,5]

相关

数组去重的方式有哪些?

贡献者

isboyjc's avatar isboyjc

浏览量(PV)  次  ·  独立访客(UV)  人次
不正经的前端 | 八股 · 欢迎 star ⭐