美文网首页
如何将一个数组去重

如何将一个数组去重

作者: 陈学谦_ | 来源:发表于2017-05-19 01:07 被阅读56次

    一、废话开头

    相信大家再面试时都有遇到过这个问题——“如何将一个数组去重”。这近两个月的招聘中我已经三次被问到这个问题了。第一次如果我没记错的话是百度的笔试遇的;第二次是做一家创业公司的笔试题遇的;第三次是面试另一家创业公司遇到的。

    二、正文

    采用平稳退化的方法来叙述我的方法吧。

    1. ES2015

    // 原数组
    let arr = [1, 3, 3, 4, 2, 3, 5, 6, 4, 2, 11, 7, 5, 4, 6];
    
    // 创建数组对应的Set对象
    let arr_set = new Set(arr);
    
    // 将Set对象转化为数组
    Array.from(arr_set); // [1, 3, 4, 2, 5, 6, 11, 7]
    

    代码中用到的SetArray.from均为ES2015标准中新定义的特性。当然,let也是ES2015中的。

    这个方法绝对是最酷的,最快捷的,每次遇到这题的时候我都会使用这个方法,没有什么原因,就是很酷。

    关于Set的用法请见MDN

    2. ES5.1 & 对象键值

    var arr = [1, 3, 3, 4, 2, 3, 5, 6, 4, 2, 11, 7, 5, 4, 6];
    
    var obj = [];
    
    // 将数组元素作为键值
    arr.forEach(function (item) {
      obj[item] = null;
    });
    // 得到由对象键值组成的数组
    arr = Object.keys(obj);
    // 但是此时元素是string,还需转为number
    arr.forEach(function (item, i) {
      arr[i] = Number(item);
    });
    
    arr; // [1, 2, 3, 4, 5, 6, 7, 11]
    

    代码中用到的Array.prototype.forEachObject.keys均为ES5.1中的新特性。

    这个方法应该是除了方法1以外最酷的方法了吧。晗哥当时面试时就用的这个方法,至于为什么没用方法1?因为面试官不让用ES6 = =。

    3. 遍历

    代码就不贴了,原理大家都懂。

    相关文章

      网友评论

          本文标题:如何将一个数组去重

          本文链接:https://www.haomeiwen.com/subject/tfbexxtx.html