JS数组去重

154 阅读1分钟

ES5的写法:

var arr = [1,2,3,3,2,1];
var result = [];

for(var i = 0; i < arr.length;i++){
  if(!result.includes(arr[i])){
    result.push(arr[i]);
  }
}
console.log(result);

ES6的写法:

var arr = [1,2,3,3,2,1];
var set = new Set(arr);
var newArr = [...set]; //或者 var newArr = Array.from(set);
console.log(newArr);

总结:

由此可见,ES6的写法,要简便许多。

ES6 提供了新的数据结构 Set它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set是构造函数,所以使用的时候,需要 new 实例化。

参数:new Set(),数组/类数组对象(array-like object)/ 具有 iterable 接口的其他数据结构(如String类型)。


Array.from() 将类数组对象(array-like object)或者迭代器(iterable)类型的对象(包括set,map),转换为数组;

只要是部署了 Iterator 接口的数据结构,Array.from都能将其转为数组。

扩展运算符(...)也可以将某些数据结构转为数组,背后调用的是遍历器接口(Symbol.iterator

所谓类似数组的对象,本质特征只有一点,即必须有length属性。因此,任何有length属性的对象,都可以通过Array.from方法转为数组,而此时扩展运算符就无法转换。