JS 数组篇 数组求和与数组去重

数组求和

  1. for循环求和

     let arr = [1,2,3,4,5]
     function sum(arr){
       let sum = 0;
       for(let index = 0;index<arr.length;index++){
         sum += arr[index]
       }
       return sum 
     }
     console.log(sum(arr))
    
  2. map-reduce求和

    let arr = [1,2,3,4,5]
    function sumMap(arr){
      let sum = 0
      arr.map((value,index,arr)=>{
        sum += value
      })
      return sum
    }
    function sumReduce(arr){
     return arr.reduce((prev,cur)=>{ return prev+cur})
    }
    console.log(sumMap(arr))
    console.log(sumReduce(arr))
    
  3. forEach循环

    let arr = [1,2,3,4,5]
    function sumForeach(arr){
       let sum = 0
       arr.forEach(val => {
         sum += val
       });
       return sum
     }
     console.log(sumForeach(arr))
    
  4. 递归

    let arr = [1,2,3,4,5]
    function recursion(arr){
    	 let len = arr.length
    	 if(len == 0){
    	   return 0
    	 }
    	 if (len == 1) {
    	   return arr[0]
    	 }
    	 return arr[0] + recursion(arr.slice(1))
    }
    console.log(recursion(arr))
    

数组去重

let arr = [1, 2, 2, null, undefined, [], {}, {}, 'str', 'str', { a: 1 }, {a:1}]
  1. 解构+Set

    let arr = [1, 2, 2, null, undefined, [], {}, {}, 'str', 'str', { a: 1 },{a:1}]
    function unique(arr){
    	return [...new Set(arr)]
    }
    console.log(unique(arr))
    //[1,2,null,undefined,[], {},{}, 'str',{ a: 1 }, { a: 1 }]
    
  2. Array.form + Set

    function unique(arr){
    	return Array.from(new Set(arr))
    }
    console.log(unique(arr))
    //[1,2,null,undefined,[], {},{}, 'str',{ a: 1 }, { a: 1 }]
    
  3. Array.map + indexOf

    function unique (arr) {
      let tempArr = []
      arr.map((value) => {
        if (tempArr.indexOf(value) === -1){
          tempArr.push(value)
        }
      })
      return tempArr
    }
    console.log(unique(arr));
    //[1,2,null,undefined,[], {},{}, 'str',{ a: 1 }, { a: 1 }]
    
  4. Array.forEach + includes

    function unique (arr) {
      let tempArr = []
      arr.forEach(val => {
        if (!tempArr.includes(val)) {
          tempArr.push(val)
        }
      });
      return tempArr
    }
    console.log(unique(arr));
    //[1,2,null,undefined,[], {},{}, 'str',{ a: 1 }, { a: 1 }]
    
  5. Array.forEach + Map

    function unique (arr) {
      let map = new Map()
      let array = new Array()
      arr.forEach(val =>{
          if(map.has(val)){
              map.set(val,true)
          }else{
              map.set(val,false)
              array.push(val)
          }
      })
      return array;
    }
    console.log(unique(arr));
    //[1,2,null,undefined,[], {},{}, 'str',{ a: 1 }, { a: 1 }]
    
  6. filter + indexOf

    function unique(arr){
    	return arr.filter((val,index) =>{
    		return arr.indexOf(val,0)=== index
    	})
    }
    console.log(unique(arr));
    //[1,2,null,undefined,[], {},{}, 'str',{ a: 1 }, { a: 1 }]
    
  7. 对象属性

    function unique (arr) {
      let tempArr = []
      let obj = {}
      arr.forEach(val => {
        if (!obj[val]) {
          tempArr.push(val)
          obj[val] =val
        }
      })
      return tempArr
    }
    console.log(unique(arr));
    //[ 1, 2, null, undefined, [], {}, 'str' ]
    

总结:

	1~6种方式:均无法判断出Object类型
	第7种,会将非空Object忽略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值