第六章 数组及数组的控制函数

209 阅读5分钟

一. 数组(Array)

1.数组简介

  • 数组是值的有序集合
  • 里边的每一个用逗号隔开的叫元素
  • 每个元素都有自己的位置,叫索引(下标)
  • 数组的元素可以是任何类型
  • 数组索引是从0开始的升序数列,数组最大能容纳4294967295个元素

2.创建数组

  • 使用数组直接量
  • 直接量:程序中直接使用的数据值

3.读写数组元素

  1. 使用操作符[]来读写数组中的每一个元素,[]中是数组的索引
  2. 数组有一个内置属性length,属性值存的是元素个数(长度)(循环时/取数组最后一项时使用)
  1. 如果ary[]不存在的下标得到的时undefined(因为相当于有属性名没有属性值)
  2. 如果[]里的值大于length长度,相当于新增一个索引,且中间的没有值的索引值会增添empty进行占位,但是在查找占位的索引值时会显示undefiend
  1. 数组length属性的特别之处在于(他不是只读的,通过修改length,可以从数组末尾删除或者添加元素)
  //数组(Array)是一个有序集合 里边的每一个用逗号隔开的叫元素
        //每个元素都有自己的位置,叫索引(下标)
        //元素可以是任何类型
        var ary = []
        //数组直接量创建数组
        var ary2 = [1, 2, 3]
        //读取数组的元素,通过下标
        console.log(ary2[2]);
        //数组有一个内置属性length,属性值存的是元素个数(长度)(循环时使用/取数组最后一项时)
        //for (var i = 0; i < ary2.length; i++) {}
        console.log(ary2[ary2.length - 1]);
        //如果ary[]不存在的下标得到的是undefined
        console.log(ary2[5]);
        //中间的4,5会有empty占位置但是查询的时候会显示undefined
        ary2[6] = 200;
        //length不是只读的,也是可以修改的,没有值的位置依旧还会有empty占位
        ary2[length] = 7; 
        // console.log(ary2.length);
        console.log(ary2);
        ary2[ary2.length+1] = 20;

4.循环遍历/迭代

// for 循环遍历
for (var i = 0; i < arr.length; i ++) {
    arr[i]
}

//for in 循环
for (var i in arr) {
    arr[i]
}

5.多维数组

// 创建多维数组
var cityList = [  ['广州', '深圳', '佛山', '东莞', '惠州'],
  ['南京', '苏州', '徐州', '无锡', '南通'],
  ['济南', '青岛', '烟台', '潍坊', '淄博'],
  ['杭州', '宁波', '温州', '绍兴', '湖州']
];

// 多维数组取值
cityList[2][1];

6.字符串具有数组的特性

  • 字符串可以通过[]取到指定的字符,只能取值无法修改
  • 字符串属性.length可获得字符换的长度(字符的个数)
  • 字符串可以向数组那样遍历

二. 调控数组方法

1. push()

  • 作用:在数组的末尾追加元素
  • 参数:你追加的东西
  • 返回值:现数组长度
  • 是否改变原数组:改变
var ary = [1,2,3]
var returnAry = ary.push(5,6)
console.log(ary,returnAry)

2.pop()

\

  • 作用:删除末尾最后一个
  • 参数:没有
  • 返回值:被删除元素
  • 是否改变原数组:改变
var ary = [1,2,3]
var returnAry = ary.pop()
console.log()

3.shift()

  • 作用:删除数组第一项
  • 参数:没有
  • 返回值:被删除元素
  • 是否改变原数组:改变
var ary=[1,2,3]
var returnAry = ary.shift()
console.log(ary,ruturnAry)

4.unshift()

  • 作用:在数组前增加元素
  • 参数:被增加的元素
  • 返回值:现数组长度
  • 是否改变原数组:改变
var ary = [1,2,3]
var ruturnAry = ary.unshift(5)
console.loog(ary,returnAry)

5.reverse () 倒序

  • 作用:把元素数组反向排列
  • 参数:没有
  • 返回值:一个被反序的新数组
  • 是否改变原数组:改变
var ary = [1,2,33,4,5]
var returnAry = ary.reverse()
console.log(ary,returnAry)

6.sort() 排序

  • 作用:把元素重新顺序排列
  • 参数:没有
  • 返回值:排序后的新数组
  • 是否给便原数组:改变
var ary = [1,4,6,2,5]
var returnAry = ary.sort()
console.log(ary,returnAry)
//不传参的时候只能排列10以内的(升序)

//---------------------------传参的时候
var ary2=[1,21,5,33,26]
//回调函数:1.函数是你定义的 2.你没有调用 3.但是这个函数却执行了
ary2.sort(function(a,b){
   return a-b; // 升序
  // return b-a; //降序
}) 

7.splice()

  • 作用:增删改一体化
  • 参数:多个
  • 返回值:删除的元素(用数组装的)
  • 是否改变原数组:改变
varary = [1,2,3,4]
//1.删除 必须要有两个参数
//参数1. 表示你要开始删除的下标
//参数2. 表示你要删除的个数
var ruturnAry = ary.splice(1,2)
console.log(ary,returnAry)


//2.新增 几个参数
//参数1. 要插入的下标位置
//参数2. 删除的元素数量
//参数3. 要插入的元素
var returnAry = ary.splice(0,0,5)
console.log(ary,returnAry)



//3.修改(删除的个数和新增的个数可以不一致)
//参数1. 开始的下标位置
//参数2. 删除的元素数量
//参数3. 要增加的元素
var returnValue = ary.splice(0,3,4,5);
console.log(ary,returnValue);

8.slice()

  • 作用:截取你选中的特定内容
  • 参数:
  • 返回值:选中内容
  • 是否改变原数组:不改变
var ary = [1,2,5,7]
//如果参数不写或者只有一个(0),表示把原数组复制一份
//如果参数有两个,返回值为开始下标到结束下标(包含开始,不包含结束)
//如果参数有负数值,那么就以数组长度加上这个负数来确定位置
//如果结束位置小于开始位置,则返回空数组
var returnAry = ary.slice(0,2);
console.log(ary,returnValue);

9.concat()

  • 作用:实现数组或者值的拼接
  • 参数:值或者数组
  • 返回值:拼接后的新数组
  • 是否改变原数组:不改变
var ary = [1,2,4,52,121,12]
var returnAry = ary.concat([1,4,2]);
console.log(ary,returnValue);

10.tostring()

  • 作用:把数组转换为字符串
  • 参数:没有
  • 返回值:字符串
  • 是否改变原数组:不改变

11.join()

  • 作用:把数组通过指定的连接符转换为字符串
  • 参数:连接符
  • 返回值:转换后的字符串
  • 是否改变原数组:不改变

12.includes()

  • 作用:检测数组中是否包括某一项
  • 参数:具体项
  • 返回值:布尔值
  • 是否改变原数组:不改变

13.indexOf/lastindexOf()

  • 作用:获取某项在数组中(首次出现的/最后出现的)索引(也可以用来检测是否包含某项)
  • 参数:(n,m)
    • n:检测项
    • m:从哪个位置开始检索,如果是lastindexOf的话,就是从索引m停止检索
  • 返回值:
    • 此项在数组中没有出现,返回值为-1
    • 若在数组中出现,返回值是具体的检索值
  • 是否改变原数组:不改变

数组迭代方法

14.foreach()

  • 作用:获取数组中的索引值和索引
  • 参数:函数
  • 返回值:undefined
  • 是否改变原数组:不改变
  • 注意:函数没有返回值
var  ages = [18,19,40,40]
//让每个人年龄都加一岁
     var  newAges = [];
     var return_value =  ages.forEach((a,b)=>{
       //newAges.push(a+1);//第一种方法
       //newAges[b] = a+1   //第二种方法
       //ages[b] = a+1      //第三种方法(改变源数组)
       return a+1  
     })
    //  console.log(return_value);
     
     console.log(newAges);
     console.log(ages);

15. map()

  • 作用:把一个数组映射成一个新数组
  • 参数:函数
  • 返回值:映射后的新数组
  • 是否改变原数组:没有
  • 注意:函数有返回值
// 有一个数组装着2021年所有人的年龄,2022年以后,每个人的年龄都增加1岁
var allAge = [19,15,2,30,32,43,45];
var age2020 = allAge.map(function (a,b) {
    return a+1;
    
})
console.log(age2020);