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] }
有些东西看起来虽然很简单,但是真正去能去理解的寥寥无几,还是要多学习!