目录
-
数组是应用数据类型中的对象数据类型(特殊对象)
-
创建一个对象也要开辟一个堆内存,堆内存中存储数组对象的键值对
let arr=[10,20,30]; conosle.log(arr); //输出: 0: 10 1: 20 2: 30 length: 3
-
数组中我们看到的每一项都是属性值,默认属性名是数字,数字从零开始递增,数字代表当前的第几项,我们把代表位置的数字属性名称为"索引";数组是以数字为索引,索引从零开始的结构!
-
在数组中默认存在一个length属性,代表着数组的长度(有多少项)
let arr=[20,39,54]; console.log(arr.length);//3
-
数组中存在的每一项可以是任意数据类型
let arr=['aaa',{name:'teal'},20,function(){}]; console.log(arr); // 输出 0: "aaa" 1: {name: "teal"} 2: 20 3: ƒ () length: 4
-
-
项目使用
- 真实项目中,我们把从服务器获取到的数据一般都是对象或者数组(json格式),而且结构层次一般都是多级结构
- 一维数组(只有一级结构)]
- 二维数组(也叫多维数组,有两级或以上结构)
- 真实项目中,我们把从服务器获取到的数据一般都是对象或者数组(json格式),而且结构层次一般都是多级结构
-
数组中常用的内置方法
-
关于数组的增删改
-
push:向数组末尾追加元素
- params: 参数个数不固定,类型也不固定,都是向数组末尾依次追加内容
- return :返回的结构为新增加后数组的长度
- 原始数组发生变化
let arr=[10,20,30]; let result=arr.push(40,'50'); console.log(arr);//[10,20,30,40,'50']; console.log(result);//5
-
pop:删除数组中最后一项内容
- params:参数为空
- return:返回结果为删除的内容
- 原始数组改变
let arr=[10,20,30]; let result=arr.pop(); console.log(arr);//[10,20] console.log(result);//30
-
unshift:向数组开头位置新填内容
- params:参数个数不定,类型不定,都是要依次在数组前新添内容
- return:返回的结果为添加后数组的长度
- 原始数组改变
let arr=[10,20,30]; let result=arr.unshift(0,'1'); console.log(arr);//[0,'1',10,20,30] console.log(result);//5
-
shift:删除数组中第一项内容
- params:参数为空
- return:返回的结果为被删除的内容
- 原始数组改变
let arr=[10,20,30]; let result=arr.shift(); console.log(arr);//[20,30] console.log(result);//10
-
-
指定位置的增删改
-
splice(n,m):删除指定位置的内容
- params: 从数组中索引为n的地方开始,删除到m个元素
- return: 返回的结果是删除的内容(以数组类型展示)
- 原始数组改变
let arr=[1,2,3,4,5,6]; let result =arr.splice(1,3); console.log(arr);//[1, 5, 6] console.log(result);// [2, 3, 4]
-
splice(n,m,x1,x2,…): 修改指定位置数组的内容
- params: 从索引n开始,删除m个元素,用x1(或多个值)替换删除后的内容
- return: 返回的一个数组.数组中是删除的内容
- 原始值发生变化
let arr=[1,2,3,4,5]; let result=arr.splice(0,2,'1',2.2); console.log(arr);//['1',2.2,3,4,5] console.log(result);//[1,2]
-
splice(n,0,x1,x2,…):在指定的位置添加内容
- params:从索引n开始,一个都不删除,把x1(或更多值)插入到索引n的前面
- 返回结果为空数组
- 原始数组发生改变
let arr=[1,2,3,4]; let result=arr.splice(1,0,1.1,1.2); console.log(arr);//[1, 1.1, 1.2, 2, 3, 4] console.log(result);// []
-
splice(0):删除数组中所有的内容
- params:从索引0开始,一直删除到数组的末尾
- return:返回值为整个被删除的的数组
- 原始数组发生改变
let arr=[1,2,3,4]; let result=arr.splice(0); console.log(arr);//[] console.log(result);//[1,2,3,4]
-
-
关于数组的查询
-
slice(n,m):实现数组的查询(数组指定位置的截取)
- params: 从数组n出开始查询,查询到索引为m处(不包含m)
- retutn: 返回的结果以新数组的展示
- 原始数组不变
let arr=[1,2,3,4,5,6]; let result=arr.slice(2,4); console.log(arr);//[1,2,3,4,5,6] console.log(result);//[3,4]
-
slice(n):查询指定位置后面所有的内容
- params: 从数组n的位置开始查询,一直查到数组的末尾
- return: 返回的结果是n后面所有的值,并以新数组展示
- 原始数组不变
let arr=[1,2,3,4,5,6]; let result=arr.slice(2); console.log(arr);//[1,2,3,4,5,6] console.log(result);//[3,4,5,6]
-
slice(0):查询数组中所有的内容
- params: 从索引0的位置开始截取,一直截取到最后,可以理解为把原始数组中的每一项都查询到
- return : 返回新的数组,实行数组的浅克隆,得到的新数组和原始数组是两个不同的数组(连个不同的堆内存),但是堆内存中存储的内容是一致的
- 原始数组不变
let arr=[1,2,3,4,5]; let result=arr.slice(0); console.log(arr);//[1,2,3,4,5] console.log(result);//[1,2,3,4,5]
-
-
数组的拼接
concat(x1,x2,…):实现数组的拼接
- params:把多个数组(或多个值)最后拼接成一个数组
- return: 返回结果为拼接后新的数组
- 原始数组不变
let arr1=[1,2,3]; let arr2=[6,7,8]; let result=arr1.concat('4',5,arr2); console.log(arr1);//[1,2,3] console.log(arr2);//[6,7,8] console.log(result);//[1,2,3,'4',5,6,7,8]
-
数组转换为字符串
-
获取数组中指定的索引
-
indexOf([value]);获取当前项在数组中第一次
- params:获取指定位置的索引
- return:返回结果为出现位置的索引,不存在返回-1
- 原始数组不变
let arr=[10,20,30,40,50]; let result1=arr.indexOf(30); let result2=arr.indexOf(60); console.log(arr);//[10,20,30,40,50] console.log(result1);//2 console.log(result2);//-1
-
lastIndexOf([value]);获取最后出现的索引
- params: 获取指定位置的索引
- return: 返回最后一次出现位置的索引,如果不存在返回-1
- 原始数组不变
let arr=[1,2,3,4,3,4,3]; let result1=arr.lastIndexOf(3); let result2=arr.lastIndexOf(5); console.log(arr);//[1,2,3,4,3,4,3] console.log(result1);//6 console.log(result2);//-1
-
includes([value]):验证数组中是否包含指定内容
- params:指定的内容
- return: 返回结果存在返回true,不存在返回false
- 原始数组不改变
let arr=[1,2,3,4,5]; console.log(arr.includes(2));//true console.log(arr.includes(6));//false
-
-
反转与排序
-
reverse(); 数组反转
- params:无参数
- return:返回的结果是排列后原始的数组,原始数组改变(因反转后原始数组===排列后的数组,所以一般不需要返回值,直接输出原始值即可)
- 原始数组改变
let arr=[1,2,3,4,5]; console.log(arr.reverse());//[5,4,3,2,1]
-
sort; 数组排序
- param:回调函数
- return: 返回把原始数组按照规则进行排序后的值
- 原始数组会发生改变
let arr=[2,4,5,1,3]; console.log(arr.sort());//[1,2,3,4,5]
- sort可以对单位数进行有效排序
- sort支持传递回调函数,基于自定义排序规则
- sort(a,b):在回调函数中,有两个形参.可以进行排序(返回a-b可以得到升序结果,b-a可以得到降序结果)
let arr1=[3,2,4,1,6,5]; let arr2=[3,2,4,1,6,5]; let result1 =arr1.sort(function(a,b){ return a-b; }); let result2 =arr2.sort(function(a,b){ return b-a; }); console.log(result1);//[1,2,3,4,5,6] console.log(result2);//[6,5,4,3,2,1]
-
-
数组中常用的迭代方法(遍历数组中的每一项)
-
forEach([函数]);遍历数组中的每一项(数组中有多少项,函数会相继执被执行多少次),每一次执行函数,都可以在函数中获取当前的遍历的这一项个对应的索引
- forEach中有一个回调函数,形参为item,index
- item:表示当前项的内容
- index:表示当前项的索引
let arr=[1,2,3]; arr.forEach(function(item,index){ console.log(item);// 1 > 2 > 3 console.log(index);// 0 > 1 > 2 });
-
map:forEach是不支持返回值的,而map可以在forEach的基础上支持返回值,把原来数组中每一项的值替换为新值,最后存储在一个新的数组中,但原始数组不变
- map支持返回值但是不会改变原来的数组,执行完的返回结果是修改后的新数组
- map中有一个回调函数,函数中有两个形参item,index
- item:当前循环的这一项的值
- index:当前值的对应的索引
- 函数返回啥都是把数组中当前项替换成啥,但原始数组不变
let arr=[1,2,3,4]; let result= arr.map(function(item,index){ return item*10; }); console.log(result);//[10,20,30,40]
-
-