zoukankan      html  css  js  c++  java
  • 数组去重

    数组去重,主要思路是循环遍历这个数组里的每一个数据,然后再定义一个新数组,if条件判断不重复的再往新数组里添加,最后返回新数组即可去重。这个问题思路差不多,但实现方法可以不同,话不多说,直接上代码:
    方法一:是比较原生的的写法
    function has(arr,n) { var flag = false; for(var i=0; i<arr.length;i++) { if(arr[i] == n) { flag = true; break; } } return flag; } function norepeat(arr) { var newArr = []; for(var i=0; i<arr.length; i++) { if(!has(newArr,arr[i])) { newArr.push(arr[i]); } } return newArr; }

    方法二:
    function norepeat(arr) {
    	var newArr = arr.filter(function(val,index,self) {
    		return self.indexOf(val) === index;
    		
        }) return newArr;
    }
    方法三:
    function norepeat(arr) {
    	var newArr = [];
    	for(var i=0; i<arr.length; i++) {
    		if(arr.indexOf(arr[i]) === i) {
    			newArr.push(arr[i]);
    		}
    	}
    	return newArr;
    }
    这两个方法的思路主要是利用indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等作判断条件,因为数组里有许多API,所以实现方式有多种。其实还有forEach也行:
    function norepeat(arr) {
    	var newArr = [];
    	arr.forEach(function(val,key) {
    		if(arr.indexOf(val) === key) {
    			newArr.push(val);
    		}
    	})
    	return newArr;
    }

    再其实,上面那段代码只要把forEach方法换成map方法,效果一模一样;
    function norepeat(arr) {
    	var newArr = [];
    	arr.map(function(val,key) {
    		if(arr.indexOf(val) === key) {
    			newArr.push(val);
    		}
    	})
    	return newArr;
    }

    //怎么感觉在练习怎么循环遍历数组啦~~

    方法四:哈哈!!这是最高级的哦,两行代码就搞定啦啦啦!!!
    function norepeat(array) {
      return Array.from(new Set(array));
    }
    set是一个集合,里面的值都是独一无二的,值传入里面就自动带有去重功能,它是一个伪数组,最后通过Array.from方法转换为真数组即可;
    入行不久,能想到的就这些,还有其他方法的,欢迎跟我探讨!!






  • 相关阅读:
    内存溢出OutOfMemory
    系统问题定位
    final域的内存语义
    volatile内存语义
    锁的内存语义
    happens-before
    python 安装brew(国内的自动安装)
    【Mac】点击dmg文件后无反应,解决方案
    Mac----xmind 8 下载与破解方法
    面试中可向HR 提的问题总结?
  • 原文地址:https://www.cnblogs.com/sophia0102/p/9043705.html
Copyright © 2011-2022 走看看