介绍一些数组的去重方法

2018-10-30  本文已影响0人  Cheney丶1993
数组去重,是一个面试经常会遇见的问题,这里介绍一些数组去重的方法,比较适合接触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;
}

数组去重的方法有很多,当然这些不同思路的解决方法,在性能和效率上也有很大差异。这里就不过多的做介绍了
上一篇 下一篇

猜你喜欢

热点阅读