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方法转换为真数组即可;
    入行不久,能想到的就这些,还有其他方法的,欢迎跟我探讨!!






  • 相关阅读:
    Eclipse:构造函数不提示才发现
    Java:终于找到了在alloy中的JFileChooser中的弹出式菜单不显示文字的解决办法
    java:给图片上加水印
    Asp:函数是用传值还是传址
    数据库移植注意事项
    51nod 1009 数字1的数量
    51nod1003 阶乘后面0的数量
    51nod 1002 数塔取数问题
    2017 Multi-University Training Contest
    HDU 3251 Being a Hero 最小割
  • 原文地址:https://www.cnblogs.com/sophia0102/p/9043705.html
Copyright © 2011-2022 走看看