数组的基本属性和方法

        // 数组基本属性及方法
        // concat,合并数组,原数组不改变
        var arr=[1,2,3,4,5]
        var arr1=arr.concat(1,2,3);
        console.log(arr);//1,2,3,4,5
        console.log(arr1);//1, 2, 3, 4, 5, 1, 2, 3
        // 用concat实现数组扁平化
        var arr=[1,2,[500,600],3,[10,20,[300,400]]];
        var arr1=[]
        function arrChange(arr){
            for(var i=0;i<arr.length;i++){
                if(arr[i].length){
                    arrChange(arr[i])
                }else{
                    console.log(arr1)
                    arr1=arr1.concat(arr[i])
                }
            }
        }
        arrChange(arr)
        console.log(arr);//原数组不变
        console.log(arr1);//扁平化后的一维数组
        
        // push添加到数组尾部,返回值为新数组长度
        var arr=[1,2,3,4,5];
        arr.push(10,20)
        console.log(arr);//1,2,3,4,5,10,20

        // pop删除数组最后一项,返回被删除的元素
        var arr=[1,2,3,4,5];
        arr.pop()
        console.log(arr);//1,2,3,4

        // unshift在数组头部添加元素,返回新数组长度
        var arr=[1,2,3,4,5];
        arr.unshift(10,20)
        console.log(arr);//10,20,1,2,3,4,5

        // shift删除第一项,返回被删除的元素
        var arr=[1,2,3,4,5];
        arr.shift()
        console.log(arr);//2,3,4,5

        // splice,删除、替换,返回被替换掉的元素组成的数组
        var arr=[1,2,3,4,5,6];
        var arr1=arr.splice(0);
        console.log(arr)//[]
        console.log(arr1)//1,2,3,4,5,6

        var arr=[1,2,3,4,5,6];
        var arr1=arr.splice(0,1);
        console.log(arr)//2,3,4,5,6
        console.log(arr1)//1

        var arr=[1,2,3,4,5,6];
        var arr1=arr.splice(0,2,100);
        console.log(arr)//100,3,4,5,6
        console.log(arr1)//1,2
        
        // join,将数组转换成用规定字符分割的字符串,原数组不改变,返回字符串
        var arr=[1,2,3,4,5]
        var arr1=arr.join('+');
        console.log(arr)//1, 2, 3, 4, 5
        console.log(arr1)//1+2+3+4+5

        // indexOf查找数组中是否有某一项,有返回下标,无返回-1,从前向后查找
        // indexOf参数1为要查找的元素,参数2位从哪里开始查找
        var arr=[1,2,3,4,5,1,2,3,4,5];
        var index=arr.indexOf(2,2);
        console.log(index);//6
        var index=arr.indexOf(2);
        console.log(index);//1
        
        // 假如一个元素在数组中出现多次,获取每次的下标
        // arr元素所在数组,item要查找的元素
        // 第一种
        function getArrIndex(arr,item){
            var arrIndex=[]
            var index=0
            for(var i=0;i<arr.length;i++){
                // arrIndex存储查到的下标,判断如果查找到了,就让下次查找从当前下标的下一项开始
                if(arrIndex.length){
                    index=index+1
                }
                index=arr.indexOf(item,index);
                if(index<0){
                    break
                }
                arrIndex.push(index)  
            }
            return arrIndex
        }
        var arr=[1,2,3,4,5,5,1,2,3,4,5,6,7,5];
        var indexList=getArrIndex(arr,11)
        console.log(indexList)//[]
        var indexList=getArrIndex(arr,5)
        console.log(indexList)//[4,5,10,13]

        // 第二种
        function getArrIndex(arr,item){
            // 深复制元素所在数组
            var arrCopy=JSON.parse(JSON.stringify(arr));
            var arrIndex=[]
            for(var i=0;i<arrCopy.length;i++){
                var index=arrCopy.indexOf(item)
                if(index>-1){
                    // 每次从第0位开始查找,查找到直接删除元素,这样可以保证数组长度不变
                    delete arrCopy[index]
                    arrIndex.push(index)
                }
            }
            return arrIndex
        }
        var arr=[1,2,3,4,5,5,1,2,3,4,5,6,7,5];
        var indexList=getArrIndex(arr,1)
        console.log(indexList)//[0,6]
        var indexList=getArrIndex(arr,5)
        console.log(indexList)//[4, 5, 10, 13]


        // lastIndexOf查找元素位置,从后向前查找
        var arr=[1,2,6,3,4,5,3,6];
        var index=arr.lastIndexOf(6)
        console.log(index)//7

        // slice复制数组的数据,参数1从哪开始,参数2到哪结束
        var arr=[1,2,3,4,5,6]
        var arr1=arr.slice(0,2)//截取下标为0和1的两位
        var arr1=arr.slice(0)//截取全部
        var arr1=arr.slice(-1)//截取最后一位
        var arr1=arr.slice(-3,-1)//截取倒数第3位和第4位
        var arr1=arr.slice(0,-1)//截取开始到倒数第2位
        console.log(arr);
        console.log(arr1);

        // reverse:倒序数组,但不排序,返回的数组就是原数组,原数组改变;
        // 例如:
            var arr=[1,2,5,4,3,6,7];
            var arr1=arr.reverse();
            console.log(arr1);
        // 结果就是7,6,3,4,5,2,1;
        // 不进行排序,只是单纯的反过来排列
        
        // 数组的归并和筛选
        // 筛选filter
        var arr=[1,2,3,4,5,6,7,8,9]
        var arr1=arr.filter(item=>{
            if(item>5){
                return item>5
            }
        })
        console.log(arr)//[1,2,3,4,5,6,7,8,9]
        console.log(arr1)//[6,7,8,9]
        
        // 归并reduce,sum基础值,不赋值就是数组第一项,item是每一项
        // reduce共有四个参数,后两个分别为下标和数组本身
        var arr=[1,2,3,4,5,6,7,8,9]
        var sum=arr.reduce((sum,item)=>{
            console.log(sum,item)
            return sum+item
        },100)
        console.log(sum)//145

 

posted @ 2020-05-29 11:34  Alex-Song  阅读(468)  评论(0编辑  收藏  举报