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方法转为数组,而此时扩展运算符就无法转换。