数组
数组 1.数组:数组是一组数据(数据类型不限,任意)的有序集合===>我们写代码,一般一个数组只放一种数据类型的数据 2.我们写代码,一般一个数组只放一种类型的数据 3.注意: 大多数的语言里面数组的存储是连续的,但是js的数组特点决定了js的数组不一定是连续的。 数组的特点 1.作用:将许多零散的数据组成一个整体 2.数组本身属于复杂数据类型(引用数据类型/对象),即我们使用的数组就是“对象” 3.数据类型不限,任意(一般一个数组只放一种数据类型的数据) 4.根据需要,对数组内部数据进行一些操作(增删查改) 数组的创建 1.字面量的方式 例如: let arr = [];(没有初始化值) 例如: let arr = [ 1,2,3,4,5,"6"];(初始化了六个值) 2.构造函数的方式 例如: le arr = new Array();(没有初始化值) 例如: let arr = new Array(1,2,3,4,5,"6")(为数组初始化) 如果let arr = new Array(5)就相当于创建了五个空元素的arr数组 数组的下标 数组中存储是数据时有序的,我们就给每一个元素加一个编号,称之为“下标”/"索引"(index) 索引的特点: index从0开始,到 “数组元素个数-1” 结束 下标的使用: 数组名称[index]===> 查看数据:(查询时,越界?访问到一个undefined值,不管学什么语言,越界一般是不允许的) 多维数组 数组里面嵌套数组的这种结构,就叫做多维数组。二维数组本质上就是一维数组作为了一个一维数组的元素,即数组的数组; 例如:let arr = [[1,2,3],[4,5,6]]; 数组的遍历 1.普通for循环 2.for...of遍历(ES6新增的)注意:可以把value看成每次循环按顺序取了arr中元素的值,而value不代表arr的元素,所以value的赋值不影响arr中的元素 ES6中的操作 1.扩展 “...”:扩展运算符 ===>把一个整体扩展开来,相当于解构一个数组的一个维度。 运用: a.合并数组 let newArr = [...arr1,...arr2] b.拷贝数组 let arr2 = [...arr1] 2.解构 等号两边保持解构一致(关于数组),然后按照对应的位置,把右边的数据赋值给左边的变量;实现批量赋值 注意 a、当左边的变量多余右边的数据时:没有对上号的变量值不变 b、当左边的变量少余右边的数据时:没有对上号的数据不影响赋值 运用场景 a、墨水交换 let num1 = 9,num2 = 0,t; [num1,num2] = [num2,num1]; b、获取对应的值(前面用逗号隔开) let [,,,d,e] = arr; 排序 例如:冒泡与选择等 1.冒泡排序 let array = [5,2,7,9,8,0,44,121,1]; for(let i = 0; i < array.length - 1; i++){ for (let j = array.length - 1; j > i; j--) { if(array[j]<array[j - 1]){ [array[j],array[j - 1]]=[array[j - 1],array[j]]; } } } console.log(array); 2.选择排序 let array = [5,2,7,9,8,0,44,121,1]; for (let i = 0; i < array.length-1; i++) { let min = array[i],index=i; for (let j = 1+i; j < array.length; j++) { if(min > array[j]){ min = array[j]; index = j; } } [array[i],array[index]]=[array[index],array[i]]; } 数组的方法(都很实用) 1.添加 push(value) 概念:在尾部添加元素,并返回一个新的长度 unshift(value) 概念:在数组开头添加元素,并返回一个新的长度2.删除
pop() 概念:删除最后一个元素 shift() 概念:删除第一个元素 splice(参数1,参数2,参数3) 第一个参数:整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。 第二个参数:要删除的项目数量。如果设置为 0,则不会删除项目。 第三个参数以及后面的参数:可选。向数组添加的新项目。 返回值:包含被删除项目的新数组,如果有的话。 3.查找 indexOf(value) 概念:查找所在位置(index),从头开始查,查到第一个结束 lastIndexOf(value) 从尾部开始查找和indexOf相反 includes(value) 要查询的值,返回有没有(true/false) 4.提取 slice() 通过指定开始和结束索引,来提取元素(组成新数组),不影响原数组===>[start,end) 5.拼接 join("value")拼接:separator参数代表了“分隔符” 6.切割 split("value") 切割:上一个方法的反向操作 7.其它 concat() 把B数组拼接到A数组后,作为返回值返回,不影响原数组 reverse() 反序的改变原数组 sort() 默认规则是按照字典顺序的 ex.sort(function(a,b){ return a-b;//结果是负数b大,正数a大,相等值为0 }); ex.reverse(); console.log(ex);//true====》没有副本的产生,返回值就是原数组 数组的遍历 - foreach 普通遍历,没有return返回值 - map 单独处理每一个元素:会把每一个元素做return后面的处理,返回组成新的数组 - filter 过滤,满足条件留下组成新数组 - some/every some(只要有一个满足,返回true)/every(必须全部满足,才返回true) - reduce/reduceRight(迭代计算) - 将数组第一个元素和第二个元素分别赋值给prev,next,然后通过return后面的表达式获得一个值,该值作为下一次循环的prev,而next取下一个元素,直到取完所有元素,获得的最终值作为 返回值返回