如何将一个数组去重

一、废话开头

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

二、正文

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

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. 遍历

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

你可能感兴趣的