es6的学习(set结构数组去重)

  • Post author:
  • Post category:其他


现在es6逐渐成为了进入了前端开发的视野里,各大浏览器和流行的框架对es6的支持也非常好,之前看过几次阮一峰老师写的es6入门这本书,感觉非常不错,所以是时候再深入地去学习总结一下了。那么就先从set结构数组去重开始吧。

以前数组去重非常麻烦,我之前也总结过。那么就来总结一下数组去重有哪些方法吧。


1.使用set数据结构去重。(es6新方法)


先看一下set的定义:

***ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set 本身是一个构造函数,用来生成 Set 数据结构。

const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
  console.log(i);
}
// 2 3 5 4

封装一个数组去重函数(Array.from()转化数组的新方法)

function dedupe(array){
 return Array.from(new Set(array));
}
dedupe([1,1,2,3]) //[1,2,3]

扩展运算符(…)内部使用for…of循环

let arr = [1,2,3,3];
let resultarr = [...new Set(arr)]; 
console.log(resultarr); //[1,2,3]
// 这样也能封装成一个更简洁的数组去重方法  如下
let deletRepeat = (arr)=> [...new Set(arr)];
deleRepeat([1,2,3,4,5,6,6,5,4,3,2,1,6])   //  [1, 2, 3, 4, 5, 6]


2.利用indexOf以及forEach(利用下标去重法)

let arrResult = [];
arr.forEach(function(v,i,arr){
 let bool = arr.indexOf(v,i+1);
 // 也可以这样写,es6新出了一种校验数组是否包含一个成员的方法includes
 // 该方法的第二个参数表示搜索的起始位置,默认为0。如果第二个参数为负数,则表示倒   数的位置,如果这时它大于数组长度(比如第二个参数为-4,但数组长度为3),则会重置为从0开始。
 // let bool = arr.includes(v,i+1); i+1表示开始搜索的位置
 // if(!bool){
 //    arrResult.push(v);
 //}
 // es6的includes这个方法很不错,在大部分时候可以替代indexOf();
 if(bool==-1){
 arrResult.push(v);
}
});
console.log(arrResult);

还有好多种方法,以后会逐一添加…


3.利用es6新出的includes和forEach方法去重(和方法2类似)

function array(arr){
    let newarr = [];
    arr.forEach(function(currentIndex,i,array){  // 利用forEach
        if(!arr.includes(currentIndex,i+1)){  // 利用includes方法 记住i+1是重点,
        //  相当于是从当前元素之后开始检索有没有和当前元素一样的元素,如果没有就加到新数组里面,如果有就不添加
          newarr.push(currentIndex);
        }
    })
    return newarr; 
}

let arr2 = [1,2,3,4,1,3,5,6,4,3,2,1]

array(arr2)
//  (6) [5, 6, 4, 3, 2, 1]



版权声明:本文为xiaolinlife原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。