JS数组

114 阅读5分钟

push

  • 语法:数组名.push(数据)
  • 作用:向数组末尾 新增一条数据
  • 返回值:新增数据后最新的数组长度
   var arr =[1,2,3]
   //数组名.push(数据)
   //var len =arr.push(100)
   //console.log(arr)
   //console,log('返回值:',len)

手动模拟 push

  • 作用:向数组末尾 新增一条数据
 function push(push_arr,data){
  push_arr(push_arr.length)=data
   return push_arr.length
   }
   push(arr,100)
   push(arr,'哈哈哈哈')
   push(arr,true)
   console.log(arr)

pop

  • 语法:数组名.pop()
  • 作用:删除数组末尾最后一个数字
  • 返回值:被删除的数据

     // 自己封装一个 pop 函数
          //作用: 删除数组末尾最后一个数据
        // 返回值: 被删除的数
        
        var arr=[1,2,3]
        function pop(pop_arr){
        
         // 0. 先将数组末尾的数据保存, 用于删除后返回出去
          var len =pop_arr[pop_arr.length-1]
          // 1. 删除 数组末尾最后一个数据
            // 删除后 位置还在, 也就是说, 数组最后一位的值没有了, 但是 length 不变  (人出去了, 桌子还在)
            // delete pop_arr[pop_arr.length - 1]

            // 删除后 位置也没了, 也就是说, 数组最后一位的值和位置都被删除了,  (人和桌子都没了)
          
          pop_arr.length-=1
           // 2. 返回被删除的数据
            // console.log('函数内: ', len)
          return len
        }
        var res =pop(arr)
        console.log('函数执行完毕后的数组:',arr)
        console.log('函数执行完毕后的返回值:',res)
  

unshift

  • 语法:数组.unshift(数据)
  • 作用:向数组开头,添加一个数据
  • 返回值:新增完数据后的一个数组长度

  var arr =[1,2,3]
  console.log(arr)
  
  function unshift(unshift_arr,data){
  //逻辑
  //1. 创建一个新的数组, 然后将这个数组开头放上我们执行要添加的数据
  //2.  2. 在将原本数组后续的内容, 放在新数组的后边
  
  
  //1.创建一个新的数组, 然后将这个数组开头放上我们执行要添加的数据
  var newArr = [data]
  
  //2. 在将原本数组后续的内容, 放在新数组的后边
  
  for(var i=0;i<unshift_arr.length;i++){
  newArr[i+1]=unshift-arr[i]
  }
  return{
  arr:newArr,
  len:newArr.length
  }
  }
  var res = unshift(arr,'newData')
  var arr1=[1,2,3]
  console.log(arr1)
  var len=arr1.unshift(100)
  console.log(arr1)
  

shift

  • 语法:arr.shift()
  • 作用:删除首位元素的值
  • 返回值:返回删除的元素
   var arr =[1,2,3,4,5,6]
   console.log(arr.shift())
   
   //函数
   function shift(a){
   // 1. 暂存数组首位的内容, 将来要返回出去
   var temp=a[0]
   //  2. 遍历数组找到数组所有的内容, 删除首位的内容
   for(var i=0;i<shift_arr.length;i++){
    a[i]=a[i+1]
    }
    a.length-=1
    return temp
    }
    var res =shift(arr)
    console.log(arr)

reverse()

  • 语法:arr.reverse()
  • 作用:反转数组
  • 返回值:反转后的数组
  • 注意:该方法能够改变原数组
  var arr = [1, 2, 3, 4, 5, 6]
        // console.log('原数组: ', arr)
        // console.log('调用方法后的返回值: ', arr.reverse())
        // console.log('调用方法后数组: ', arr)

        // 自定义函数
        function reverse(a) {
            /**
             *  1. 交换数组内部元素的位置, 第一个和最后一个交换, 第二个和倒数第二个交换
             * 
             *      第 1 轮循环     i === 0
             *          var temp = a[i]         var temp = a[0]         temp === 1
             *          a[i] = a[a.length - 1 - i]          a[0] = a[a.length - 1 - 0]      a[0] = 6
             *          a[a.length - 1 - i] = temp          a[a.length - 1 - i] = 0         a[5] = 0
             * 
             *          所以第一轮循环 是将 第一个位置的值  和  数组最后一个位置的值 位置上进行了一个交换
             * 
             *      第 2 轮循环     i === 1
             *              ......
             * 
             *      第 3 轮循环     i === 2
             *              ......
             * 
             *      第 4 轮循环     i === 3
             *              ......
            */
            for (var i = 0; i < a.length / 2; i++) {
                var temp = a[i];
                a[i] = a[a.length - 1 - i]
                a[a.length - 1 - i] = temp
            }


            // 2. 将反转完毕的数组, 返回出去
            return a
        }

        var res = reverse(arr)
        console.log(res);

sort

    语法1: 数组名.sort()
         *      作用: 将数组内的数据, 转换为 字符串, 然后一位一位的对比
         *
         *      语法2: 数组名.sort(function (a, b) { return a - b })
         *      作用:   会按照数字的 从小到大
         *
         *      语法3: 数组名.sort(function (a, b) { return b - a })
         *      作用:   和 语法2相反, 从大到小
         *
         *      返回值: 返回一个排序好的数组
         *
         *      注意: sort 使用后能够修改原数组
        */

  
 // 语法1
        var arr = [1, 2, 3, 4, 5, 100, 300, 401, 404, 500, 1001, 2023]
        console.log('原数组: ', arr)
        console.log('sort 的返回值: ', arr.sort())
        console.log('调用方法后的数组: ', arr)
        arr.sort()
        console.log(arr)
        
        
    //语法2
    var arr = [100, 30, 54, 67, 21, 6]
    aarr.sort(function(a,b){returna-b})
    console.log(arr)
    
    
    //语法3
    var arr = [100, 30, 54, 67, 21, 6]
    arr.sort(function (a, b) { return b - a })
    console.log(arr) 
 

indexof

  • 语法1: 数组.indexof(数据)
  • 语法2: 数组.indexof(数据,从那个下标开始(第二个参数不传,默认为0)
  • 作用:从左到右的顺序,查找数组中是否包含这个数据
  • 返回值:
  •  找到:返回从左到右第一次出现的下标
    
  •  否则返回-1
    
        var arr = [1, 2, 3, 4, 1, 2, 3]
        //         0  1  2  3  4  5  6

        console.log(arr.indexOf(1)) // 0
        console.log(arr.indexOf(100)) // -1
        console.log(arr.indexOf(1, 3)) // 4
        console.log(arr.indexOf(1, 5)) // -1

        console.log('arr: ', arr)
        
        
         /**
         *  封装一个函数, 名为 indexOf
         * 
         *      功能: 从左到右的顺序, 查找数组中是否包含这个数据, 同时可以指定从哪个位置开始查询
         * 
         *      返回值:
         *          找到: 返回从左到右第一次出现的下标
         *          否则返回 -1
        */
             var arr=[1,2,3,4,1,2,3]
             //       0 1 2 3 4 5 6
             
             function indexof(arr,data,index = 0){
              for(var i =index;i<arr.length;i++){
              if(arr[i]===data) return i
              }
              return -1
              }
               console.log(indexOf(arr, 5, 3)) // -1
               console.log(indexOf(arr, 1, 3)) // 4

/** * splice (作用类似于 剪切) * * 语法1: 数组.splice(开始索引, 剪切多少个) * 功能: 剪切 * * 语法2: 数组.splice(开始索引, 剪切多少个, 数据1, 数据2, 数据3.....) * 功能: 将 第三个参数开始到结束的所有内容, 替换你指定的区域内容 * * 返回值: 剪切到的内容 */

  var arr = [1, 2, 3, 4, 5]
        //         0  1  2  3  4

        // 语法1
        // arr.splice(0, 3)    // 从 [0] 开始, 剪切 3 个
        // console.log(arr)
        // var res = arr.splice(0, 3)
        // console.log('剪切到的内容: ', res)
        // console.log('剪切后的数组: ', arr)


        // 语法2
        arr.splice(0, 3, '新加入的数据1', true, undefined, { name: '张三' }, [1, 2, 3])
        console.log('剪切后的数组: ', arr)