介绍一些数组的去重方法

数组去重,是一个面试经常会遇见的问题,这里介绍一些数组去重的方法,比较适合接触JavaScript一段时间的童鞋。

最基础的,通过 indexOf 来判断

/*
* 新建一个 temp 数组用来存放去重后的数组。
* 遍历已传入的数组,indexOf 判断每一项是否在新数组里存在,不存在就 push 进去
* */
let arr = [1, 2, 3, 4, 5, 6, 3, 1, 4, 8, 0, 4, 2];
function unique (array) {
    let temp = [];  // 用来存放去重后的数组
    for (let i = 0; i < array.length; i++) {
        if (temp.indexOf(array[i]) === -1) {
            temp.push(array[i]);
        }
    }
    return temp;
}

// 这里介绍 另外一种也是通过 indexOf 来实现的,遍历判断数组中的第 i 项的位置是不是 i,
// 如果不是,则代表是重复的。
function unique1 (array) {
    let temp = [];
    for (let i = 0; i < arr.length; i++) {
        if (arr.indexOf(array[i]) === i) {
            console.log(array[i], i)
            temp.push(array[i]);
        }
    }
    return temp;
}

一行代码实现数组的去重!通过 es6 新的数据结构 Set来实现。它类似于数组,但是成员的值都是唯一的,没有重复的值。

 let arr = [1, 2, 3, 4, 5, 6, 3, 1, 4, 8, 0, 4, 2];
const set = [...new Set(arr)];
或者、
Array.from(new Set(arr))

// 笔者认为最高大上的去重方法,有木有! ^_^

比较高效的一种,有点难以理解

/*
* 获取没重复的最右一值放入新数组。
* 循环检测是否有重复的值,出现重复值则进入顶层循环的下一轮进行判断
* */
function unique (array) {
    let temp = [];
    let index = [];
    let l = array.length;
    for (let i = 0; i < l; i++) {
        for (let j = i + 1; j < l; j++) {
            if (array[i] === array[j]) {
                i++;
                j = i;
            }
        }
        temp.push(array[i]);
        index.push(i);
    }
    return temp;
}

数组去重的方法有很多,当然这些不同思路的解决方法,在性能和效率上也有很大差异。这里就不过多的做介绍了
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 昨天婆婆告诉我,咱家的玉米赶紧得锄 ,要不就荒了,锄就锄吧,咱种的来,想秋天吃煮玉米呢! 大清早的,就被手机吵醒了...
    南受朝北阅读 457评论 0 0
  • 在大学修过一门课程,但是时间久了呦,也忘记了是哪门课程,有几点内容依旧历历在目,是关于大脑记忆力的,当时很有兴趣,...
    小宇宙_cfd4阅读 293评论 0 1
  • 他出生在一个小县城,他有一个坚强的父亲,他很爱他的父亲,爱他的和蔼,爱他的坚强,他有一个快乐无忧无虑的童年,和大多...
    佳冉佳冉佳冉阅读 387评论 2 2
  • 每一个新生产品,在发展初期都会经历一段艰辛的波折,这是事务发展的必然规律。就像城市街角大街小巷摆放的共享单车,在共...
    sunnywhf阅读 323评论 0 0