数组常见方法、数组去重

数组中的常见方法

变异方法(原数组会发生改变):pop、push、unshift、shift、reverse、sort、splice
非变异方法(原数组不会发生改变,返回一个新数组): slice、concat、join、indexOf、lastIndexOf、forEach、es6中新增的方法(map、reduce、filter、some、any)、扩展运算符
数组常见的遍历方法:

  • forEach:无返回值
  • map:
  • reduce
  • filter
  • some
  • every
  • (…)
//forEach:无返回值,遍历数组中的每一项
	let arr=[1,2,3,4,5];
    let res=[];
    let res2=arr.forEach((item,index)=>{
        res.push(item*2)
        return res
    })
    console.log(res2);  //undefined
    console.log(res); //[2,4,6,8,10]
    console.log(arr); //[1,2,3,4,5]
//map:遍历数组中的每一项,有返回值
	let arr=[1,2,3,4,5];
	let res2=arr.map(item=>item*2)
    console.log(res2); //[2,4,6,8,10]
    console.log(arr); //[1,2,3,4,5]
//reduce:两个参数,第一个参数是一个函数,第二个参数是函数的初始值。
//遍历数组中的每一项,函数的第一个形参即为reduce的第二个参数,如果没有传入,则函数的两个形参分别为数组的第1,2个元素;如果传入,则该函数的两个形参分别为reduce的第二个形参和数组中的第一个元素;遍历过程中,将该函数的运算结果作为下一次该函数的第一个参数。
	let arr=[1,2,3,4,5];
 	let res2=arr.reduce((a,b)=>a+b,0);
    console.log(res2); //15

reduce传的第二个参数为0时的遍历过程 :

  let res2=arr.reduce((a,b)=>{
        console.log(a,b);
        return a+b
    });

reduce没有传第二个参数时的遍历过程
在这里插入图片描述

//filter:遍历数组中的每一项,将满足要求的元素以数组的形式返回,若没有满足要求的元素,则返回空数组
	let arr=[1,2,3,4,5];
	let res2=arr.filter(item=>item>2);
    console.log(res2); //[3,4,5]
//every和some  
//every:每一项都满足要求才返回true,否则flase
//some:只要有一项满足要求就返回true
	let arr=[1,2,3,4,5];
	let res2=arr.every(item=>item%2===0);
    let res3=arr.some(item=>item%2===0);
   	console.log(res2); //false
    console.log(res3); //true

实现一个小栗子:已知一个数组var arr = [[1, 3, 2, 1],[5, 3, 4, 8, 5, 6, 5],[6, 2, 8, 9, [4, 11, 15, 8, 9, 12, [12, 13, [10], 14]]], 16],用js编写一个程序将这个数组扁平化,并得到一个升序且无重复值的数组。得到最终结果为:[1,2,3,4,5,6,8,9,10,11,12,13,14,15,16]

var arr = [[1, 3, 2, 1],[5, 3, 4, 8, 5, 6, 5],[6, 2, 8, 9, [4, 11, 15, 8, 9, 12, [12, 13, [10], 14]]], 16];
        function flatten(arr){
            while(arr.some(Array.isArray)){
                arr=[].concat(...arr)
            }
           return arr
        }
       let flatRes=flatten(arr); 
       let set=new Set(flatRes);
       let temp=Array.from(set);
       console.log(temp);
       let res=temp.sort((a,b)=>a-b);
       console.log(res)

数组扁平化可以看我的另一篇博客数组扁平化
下面主要介绍一下数组去重的几种方法:
1. 利用set的特点和Array.from()

		var arr = [1,2,4,5,3,2,3,5,3];
        let set=new Set(arr);
        let temp=Array.from(set);
        console.log(temp);//[1,2,4,5,3]

第一种方法无法去除重复‘{}’空对象
在这里插入图片描述
2.indexOf和lastIndexOf

	  var arr = [1,2,4,5,3,2,3,5,3];
  	 for(let i=0;i<arr.length;i++){
            if(arr.indexOf(arr[i])!==arr.lastIndexOf(arr[i])){
                arr.splice(i,1);
                i--;
            }
        }
  	 console.log(arr);

3.利用reduce和indexOf

  var arr = [1,2,4,5,3,2,3,5,3];
        let res=arr.reduce((a,b)=>{
            if(a.indexOf(b)===-1){
                a.push(b)
            }
            return a
        },[])
        console.log(res)

4.利用filter

 	   var arr = [1,2,4,5,3,2,3,5,3];
       let res= arr.filter((item,index)=>{
            return arr.indexOf(item)===index
        })
        console.log(res)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哆啦咪唏

看到这里了,不留下点什么吗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值