数组

333 阅读2分钟

概念

 对象中可以通过储存多个数据,且数据类型是没有限制的,所以通常我们会在里面储存一个商品信息或者一个人的信息
  
     var obj={
         商品信息或者人的信息
     }
这种储存方式我们没办法通过一个人的姓名去获取这个人的信息,也没有办法通过一个编号获取到信息
  js给我们提供了一种对象类型的数据,可以通过编号来储存数据:数组,也是对象三种表现方式之一,[]定义的对象

定义

数组这种数据,相对于在一个大空间之中,有很多小空间,每个值前面的数字,表示这个小空间的编号,专业术语叫下标,第一个下标永远是0,依次向后递增,最后一个下标是值的个数:1
创建数组
构造函数创建数组
 
var obj=new Array(数据)
直接创建
 
var obj=[]
数组的基本操作
数组的个数:数组名.length ----》可以直接获取到数组的长度
添加数据
  var obj=[]
修改元素
    数据名[下标]=值
arr[0]="修改的新值"
 删除元素
   delete 数组名[下标]
   注意,此种方式一次只能删除一个,并且,被删掉的元素的空间会显示空也就是undefined
   
delete 数组名[下标]
数组长度的赋值: 
var arr = [1,2,3];
arr.length = 0;
console.log(arr) // []

遍历数组
两种方式:
  for循环
  for in循环
  语法
  
    for(var i=0;i<arr.length;i++){
           
    }
这种遍历方式,可以将数组之中的每个元素都经历一次
for in循环遍历数组
 for in 数组名
 语法
 
   for(var i in 数组名){
        
   }
forfor in 的区别
for循环,遍历到空数组时,会显示undefined,而for in循环不会遍历空数组

类型

两种类型:
     基础类型:number string undefined null boolean
     引用类型:{} [] function
     两者的区别
      1.储存方式不同: 
           基本类型将值存入栈内存之中,引用类型将值存入堆内存之中,将堆内存的地址存放在栈内存之中
      2.赋值过程不同
         基本类型赋值是将整个数据复制给另一个变量,一个数据改变不会影响到另一个变量,两者互不影响
         引用类型赋值其实不是把数据赋值给他,而是把自己的地址值赋给另一个变量,如果一个改变,那么另一个也会跟着改变,两者互相影响

数组的方法

  在数组中开头添加元素 ----》unshift
  语法
  
  for(var i=0 ; i<arr.length;i++){
       var 创建的变量 = 数组名 . unshift
  }
 在数组末尾添加一个元素/多个元素 ----》push
   语法
   
  for(var i=0;i<arr.length;i++){
       var 变量名= 数组名.push(添加的新值)
  }
删除数组第一个元素 返回被删的元素----》shift
  语法
  
  var 变量名=[]
  var 变量名=数组名.shift()
 删除数组最后一个元素,返回被删掉的元素 ------》pop
 语法
 
  var 变量名=[]
  var 变量名= 数组名.pop()
  对数组任意的增,删,改操作 -----》splice
   语法
   
    var 变量名= []
    变量名 .splice(开始下标,删除的个数,删除后替换的新值)
 数组的拼接 ----》concat
 语法
 
   var arr1=[]
   var arr2=[]
   var  创建的变量= arr1.concat(arr2)
 数组的排序 -----》sort
 语法
 
     var arr=[]
     arr.sort()
 数组的翻转-------》reverse
 语法
 
    var arr=[数据]
    arr.reverse()
 连接字符串 ------》join
   语法
   
    var arr=[数据]
    var  str=arr.join(自定义连接符)
 截取数组 ------》slice
 语法
 
  var arr=[数据]
   arr。slice(开始下标,结束下标)
indexof方法
查找元素第一次出现时的下标
语法
   arr.indexOf(元素,开始寻找时候的下标)
 注意,找到了返回的是元素的下标,没找到返回的是-1
lastindexOf方法
 查找元素最后一次出现时的下标
 语法和indexOfcbd
 
  arr.indexOf(元素,开始寻找时候的下标)
forEcah方法
 用于遍历数组
 语法
 
  arr.forEcah(function(val---值,下标----》index,当前数组--》Array){
      ///代码段
  })
注意,这个方法是没有返回值的,返回值为undefined,不hi改变原数组
 map方法
   遍历数组,并将所有元素经过函数处理之后,形成新的元素,所有新元素组成新数组返回
   语法
   
  arr.forEcah(function(val---值,下标----》index,当前数组--》Array){
     return 新的值
  })
注意,这个方法注意用于以同样的规则处理数组中的每个值,并且形成新的数组
 filter方法
 将数组中满足条件的值,组成新的数组返回
 语法
 
  arr.forEcah(function(val---值,下标----》index,当前数组--》Array){
     return 筛选条件
  })
 注意,使用方法和功能跟map方法很像,只是运行规则不一样。map方法中的函数,用于返回新的元素,而filter方法中的函数,根据返回truefalse来筛选元素
 reduce方法
 用于数组求和
 语法
 

   arr.forEach(function(a,b){
      return 条件
   })
 其中a第一次的时候,表示第一个元素,第二次开始表示上一次返回的数据,b第一次表示第二个元素,第二个开始表示第三个元素、第四个元素。。。
 判断数组中是否至少有一个满足指定条件的,返回布尔值 ----》some
 语法
 
  布尔值 = 数组.some(function(v,i,a){
        return 条件
  })
some内置的原理,遍历数组,判断每个值是否满足条件,有满足的就返回true,并break循环,遍历完以后都没有一个是满足的,返回false
判断数组中是否所有元素都满足指定条件,返回布尔值
语法
 
 布尔值 = 数组.every(function(){
    return 条件
    })
查找数组中第一个满足条件的值,找到了返回值,没找到返回undefined ----》find
语法
 值=数组.findfunctionv,i,a){
        return 条件
 })
 find的原理,遍历数组,判断每个元素是否满足条件,满足就返回这个元素,并break循环,如果遍历完了都没有满足条件的,就返回undefined
 findindex --->查找元素中满足条件的第一个对应的下标,找到返回下标,没找到返回-1
 
   下标=数组.findindex(function(v,i,a){
       return 条件
   })
findIndex的原理,遍历数组,判断每个元素是否满足条件,满足就返回这个元素的下标,并break循环,如果遍历完了都没有满足条件的,就返回-1 
冒泡排序
相邻两个元素进行比较,将一个数组中所有的数字使用循环进行排序
   for(var i=0;i<arr.length;i++){
       for(var j=0;j<arr.length-i;j++){
            if(arr[i]>arr[i+1]{
              var m=arr[i+1]
              arr[i+1]=arr[i]
              arr[i]=m
            }
       }
   }
选择排序
for(var i=0;i<arr.length;i++){
  for(var j=j+1;j<arr.length;j++){
      if(arr[i]>arr[j]{
         var t=arr[j]
         arr[j]=arr[i]
         arr[i]=t
      }
  }
}