zoukankan      html  css  js  c++  java
  • js中数组去重的几种方法

    数组去重的方法

    /**
     * new Array()里面如果只有一位数字就是创建新数组 设置数组的长度为几位  如果里面的数据多于一位就是创建新数组添加这几位数据
     * Array.from()方法从一个类数组或者可迭代对象创建一个新的浅拷贝的数组
     * Array.from(arrayLike[, mapFn[, thisArg]])
     * arrayLike想要转化的伪数组或者可迭代对象
     * mapFn一个回调函数 新数组中的每一项都会执行该回调
     * thisArg 执行回调时候的this对象
     */
    let arr=Array.from(new Array(1000),(x,index)=>{
      //index是新数组的索引
      return index
    })
    
    1. 利用filter方法+indexOf
    let arr=["1","1",1,1,false,false,true,true,undefined,undefined,{},{},99,99]
    
    function unique (arr) {
      return arr.filter((item,index,arr)=>{
        //当前元素在数组中的索引等于当前的索引值
        //如果不等的话证明当前元素已经存在数组中的
        return arr.indexOf(item) ===index
      })
    }
    
    
    let ary=unique(arr)
    console.log(ary)//["1", 1, false, true, undefined, {…}, {…}, 99]
    
    1. 利用es6的Set()去重
    let arr=["1","1",1,1,false,false,true,true,undefined,undefined,{},{},99,99]
    
    function unique (arr) {
      return Array.from(new Set(arr))
    }
    
    let ary=unique(arr)
    console.log(ary)//(8) ["1", 1, false, true, undefined, {…}, {…}, 99]
    
    1. 双重for循环splice去重
    let arr=["1","1",1,1,false,false,true,true,undefined,undefined,{},{},99,99]
    
    function unique (arr) {
      for(let i=0;i<arr.length;i++){
      for(let j=i+1;j<arr.length;j++){
        if(arr[i] ===arr[j]){
          arr.splice(j,1)
          j--
        }
      }
      }
      return arr
    }
    let ary=unique(arr)
    console.log(arr)//(8) ["1", 1, false, true, undefined, {…}, {…}, 99]
    
    1. 利用sort()
    let arr=["1","1",1,1,false,false,true,true,undefined,undefined,{},{},99,99]
    
    function unique (arr) {
      //李荣sort排序,根据排序后的结果遍历对比相邻的元素
      arr=arr.sort()
      let array=[arr[0]]
      for(let i=1;i<arr.length;i++){
        if(arr[i] !==arr[i-1]){
          array.push(arr[i])
        }
      }
      return array
    }
    
    let ary=unique(arr)
    console.log(ary)//(8) ["1", 1, false, true, undefined, {…}, {…}, 99]
    
    1. 利用对象的键值对中的键不能重复
    let arr=["1","1",1,1,false,false,true,true,undefined,undefined,{},{},99,99]
    
    function unique (arr) {
      let array=[]
      let obj={}
      for(let i=0;i<arr.length;i++){
        if(!obj[arr[i]]){
          array.push(arr[i])
          obj[arr[i]]=1
        }
      }
      return array
    }
    
    let ary=unique(arr)
    console.log(ary)//(6) ["1", false, true, undefined, {…}, 99]
    
    1. 利用includes是否包含某个值判断
    let arr=["1","1",1,1,false,false,true,true,undefined,undefined,{},{},99,99]
    
    function unique (arr) {
      //includes()方法判断一个数组中有没有包含指定的值 如果包含返回true 不包含返回false
      let array=[]
      for(let i=0;i<arr.length;i++){
        if(!array.includes(arr[i])){
          array.push(arr[i])
        }
      }
      return array
    }
    
    let ary=unique(arr)
    console.log(ary)//(8) ["1", 1, false, true, undefined, {…}, {…}, 99]
    
    1. 利用递归去重
    let arr=["1","1",1,1,false,false,true,true,undefined,undefined,{},{},99,99]
    
    function unique (arr) {
      let array=arr
      let length=array.length
      function loop (index) {
        if(index>=1){
          if(array[index]===array[index-1]){
            array.splice(index,1)
          }
          loop(index-1)
        }
      }
      loop(length-1)
      return array
    }
    let ary=unique(arr)
    console.log(ary)//[ '1', 1, false, true, undefined, {}, {}, 99 ]
    
    1. 利用reduce()方法
    let arr=["1","1",1,1,false,false,true,true,undefined,undefined,{},{},99,99]
    
    function unique (arr) {
      return arr.reduce((pre,cur)=>{
        console.log(pre,cur)
       return  pre.includes(cur)?pre:[...pre,cur]
      },[])
    }
    
    let ary=unique(arr)
    console.log(ary)//[ '1', 1, false, true, undefined, {}, {}, 99 ]
    
  • 相关阅读:
    【转】为什么要报考系统架构设计师考试
    前端三大主流框架中文文档
    零散知识点-类的区别;函数式编程的简单总结;
    window.location相关方法
    Hybrid相关
    php中file_get_contents与curl的区别
    三级下拉菜单
    微信生成带参数二维码及响应操作
    开发中因长时间不用而遗忘的,持续补充中。。
    项目中用到的几个工具函数
  • 原文地址:https://www.cnblogs.com/my466879168/p/12715379.html
Copyright © 2011-2022 走看看