数组是一种特殊的变量,它能够一次存放一个以上的值。数组用于在单一变量中存储多个值。
1.创建数组
-
数组的每一项可以保存任何类型的数据,数组的大小可以动态调整,随着数据的添加自动增长以容纳新增数据。
-
文本创建是最简单的方法
var arr = [1,2,3]//数组字面量由一对包含数组项的方括号表示,多个项之间以逗号隔开 var newarr = [] //空数组 -
使用关键字new创建
var arr = new Array() -
出于简洁、可读性和执行速度的考虑,请使用第一种方法(文本方法)创建
2.数组的读取和设置
-
我们通过引用索引号(下标号)来引用某个数组元素
var arr = cars[0[ //返回cars数组中首个元素的值 cars[0] = 4; //修改了cars数组中首个元素的值 -
通过javascript 可通过引用数组名来访问完整数组
console.log(cars) -
通过数组的属性length获取某个数组元素
cars[cars.length-1] //获取数组中最后一个元素的值
3.数组的转换方法
-
数组的toString()方法会返回数组中每个值(逗号分隔)的字符串
var arr = [1,2,3,4] console.log(arr.toString()) //'1,2,3,4' -
数组的join()方法也可将所有数组元素结合(拼接)成一个字符串,类似toString(),但是还可以规定分隔符
var arr1 = ['zsan','zsi','lwu']; console.log(arr1.join()) //'zsan,zsi,lwu' 不传值默认使用逗号分隔 console.log(arr1.join('|')) // 'zsan|zsi|lwu' 传值使用分隔符分割 -
如果数组中某项值为null或undefined,那么该值在join(),toString()等方法中返回的结果则是空字符串表示
4. 数组的方法
-
数组的push()方法可以接受任意数量的参数,将他们逐个添加到数组末尾,并返回修改后的数组长度
var num = [] var num1 = num.push(1,2) console.log(num) //添加完的数组 [1,2] console.log(num1) //返回的结果 新数组的长度 -
数组的pop()方法从数组最后移除最后一项,减少数组的length值,返回移除的值
var num = [1,2,3,4] var num1 = num.pop() console.log(num) //[1,2,3] console.log(num1) // 4 -
数组的unshift()方法可以在数组前端添加任意个值返回新数组的长度
var num = [1,2,3,4] var num1 = num.unshift(5,6) console.log(num) // [1,2,3,4,5,6] console.log(num1) // 6 -
数组的shift()方法移除数组的第一项并返回移除的值,同时数组长度减一
var num = [1,2,3,4] var num1= num.shift() console.log(num) // [2,3,4] console.log(num1) // 1 -
数组的reverse()方法会反转数组的顺序,返回反转后的数组
var num = [1,2,3,4] console.log(num) //[4,3,2,1] -
数组的sort()方法会进行数组排序,返回排序后的新数组
var arr = ['tom','ani','love','dav'] arr.sort() //['ani','dav','love','tom'] //默认按字符串UniCode码的顺序排序 var num = [0,1,5,10,15] num.sort() // [0,1,10,15,5] //数值排序 var num = [0,1,5,10,15] var snum = num.sort(function(a,b){ return a-b,}) console.log(snum) // [0,1,5,10,15] //升序排序 var num = [0,1,5,10,15] var snum = num.sort(function(a,b){ return b-a;}) console.log(snum) //[15,10,5,1,0] //降序排序 var arr = [ {type:'Volvo',year:2016}, {type:'Saab',year:2001}, {type:'BMW',year:2010} ]; arr.sort(function(a,b){return a.year-b.year}) // [{type:'Saab',year:2001},{type:'BMW',year:2010},{type:'Volvo',year:2016}] //根据某一项升序排序 -
数组的concat()方法先拷贝一个当前数组,将接收到的参数添加到拷贝的数组末尾,返回新数组
var num = [1,2,3] var num1 = num.concat('red',[4,5]) console.log(num) //[1,2,3] console.log(num1) // [1,2,3,'red',4,5] -
数组的splice()方法始终返回删除的值,没有删除项则返回空数组
-
删除:可以删除任意数量的项,指定2个参数,要删除的第一项位置和要删除的个数
var num = [1,2,3,4] var remove= splice(1,2) //[2,3] 删除的项 console.log(num) // [1,4] -
插入:可以向指定位置插入任意数量的项,指定三个参数:起始位置,0(要删除的项数),要插入的项
var num = [1,2,3,4]; var num1 = num.splice(1,0,5,6) //[] console.log(num) //[1,5,6,2,3,4] -
替换:可以向指定位置替换任意项,指定三个参数:起始位置,要删除的项数,要插入的项.插入的项不可以和删除的项相同
var num = [1,2,3,4] var num1= num.splice(1,2,5,6,7) //[2,3] console.log(num) // [1,5,6,7,3,4] -
数组的indexOf()和lastIndexOf()这两个方法都接受两个参数:要查找的项和(可选)查找起点的索引,indexOf()从开头往后找第一次出现的位置,lastIndexOf()从后往前找,没有找到返回-1,找到返回当前项在数组中的索引
var num = [1,2,3,4,5,4,3,2,1] num.indexOf(4); //3 num.lastIndexOf(4); //5 num.indexOf(6); //-1 -
slice截取
-
数组的slice()方法基于当前数组中的一个或多个项创建一个新数组,该方法接受两个参数,即返回项的起始和结束位置,
-
只有一个参数的情况下,slice()方法返回从开始位置到数组末尾的所有项,
-
如果有两个参数,slice()方法返回起始和结束位置之间的项,不包括结束位置的项
-
slice()方法不会影响原数组
-
如果slice()方法中有负数,则用数组长度加上该负数来确定相应位置
-
如果结束的位置小于起始位置,则返回空数组
var num = [1,2,3,4,5] var num1 = num.slice(1) //[2,3,4,5] var num2 = num.slice(1,4) //[2,3,4] var num3 = num.slice(-4,-1) //[2,3,4] var num4 = num.slice(2,1) // [] -
数组中every()传入的函数必须对每一项返回true,every()才返回true否则返回false
var num = [1,2,3,4,5,4,3,2,1] var num1 = num.every(function(item,index,array){ return item>2; }) console.log(num1) //false -
数组中some()传入的函数只要其中某一项返回true,some()就返回true
var num = [1,2,3,4,5,4,3,2,1] var num1 = num.some(function(item,index,array){ return item>2; }) console.log(num1) // true -
数组中filter()筛选出符合条件的项构建成新数组
var num = [1,2,3,4,5,4,3,2,1] var num1 = num.filter(function(item,index.array){ return item*2 }) console.log(num1) //[2,4,6,8,10,8,4,2] -
数组中map()返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
var num = [1,2,3,4,5,4,3,2,1] var num1 = num.map(function(item,index,array){ return item * 2; }) -
reduce()和reduceRight() 都会迭代数组所有项,最好返回一个最终值,reduce()从第一项开始遍历,reduceRight() 从最后一项开始遍历,接受4个参数:前一个值,当前值,项的索引,数组对象.第一次迭代发生在数组的第二项上,所以第一个参数是数组第一项,第二个参数是数组的第二项
var num = [1,2,3,4,5]; var sum = num.reduce(function(prev,cur,index,array){ return prev + cur; }) console.log(sum) //15 -
forEach和for循环一样遍历数组 forEach()方法指定数组的每项元素都执行一次传入的函数,返回值为undefined
var num = [1,2,3,4,5]; var num1 = num.forEach(function(item,index,array){ item //当前正在被处理的元素的值 index //当前元素的数组索引 array //数组本身 }) -
数组中includes()方法基于ECMAScript 2016(es7)规范,它用来判断当前数组是否包含某个指定的值,如果是,则返回true,否则false
var num = [1,2,3,4,5] var num1 = num.includes(2) //true