js跟es6实现数组去重,并计算出现了几次

数组去重是个经典的案例,虽然经常有看到,但是并没有完全去理解,今天好好做下笔记,温习温习。

 1 Array.prototype.unique3 = function(){
 2     var res = [];
 3     var json = {};
 4     for(var i = 0;i<this.length;i++){
 5         //console.log(!json[this[i]]); //如果是第一次出现就是true
 6         if(!json[this[i]]){ 
 7                     res.push(this[i]);
 8              json[this[i]] =1;  //1是代表了value的值,this[i]是key值 
 9         }
10     } 
11   return res;
12 }
13 
14 //获取当前这个数字在数组中出现了几次
15 Array.prototype.geshu = function(value){
16     let str=this.join('');
17     return str.split(value).length-1
18 }
19 
20 //对应的数字在数组中分别出现了几次
21 var reArr=arr.unique3();
22 var newArr=[]
23 for(var i=0;i<reArr.length;i++){
24     newArr.push(arr.geshu(reArr[i]))
25 }
26 
27 var arr = [1,4,1,3,2,3,1,1,1,1,1];
28 console.log(arr.unique3());  //[1,4,3,2]
29 console.log(arr.geshu(1));   //7
30 console.log(newArr);   //[7,1,2,1]

还有一种是es6的写法,得益于好友的分享。

//es6写法
{
    class Shuzu{
        constructor(arr) {
            this.arr=arr
        }
        unique3(){ //去重
            return Array.from(new Set(this.arr))
        }
        geshu(){ //找出重复的个数
            let num=[];
            let arrSum=this.unique3();
                arrSum.forEach(value=>{
                num.push(this.arr.join('').split(value).length-1)
            })
            return num
        } 
    }
    const arr = [1,4,1,3,2,3,1,1,1,1,1];
    const reArr=new Shuzu(arr)
    console.log(reArr.unique3())   //[1,4,3,2]
    console.log(reArr.geshu())   //[7,1,2,1]
}

有些东西看起来虽然很简单,但是真正去能去理解的寥寥无几,还是要多学习!

原文地址:https://www.cnblogs.com/hongyafang/p/9110721.html