与其余语言中的数组的区别:javascript
1.JavaScript数组的每一项均可以保存任何类型的数据,一个数组的数组元素能够是不一样类型的数据。
2.数组的大小是动态调整的,能够随着数据的添加自动的增加。前端
JavaScript中的数组有两种构建方式:
第一种是使用Array构造函数:java
var colors = new Array(3); //建立一个包含3项的数组,参数3表示建立的数组大小 var names = new Array("Greg","Bobi"); //建立数组
第二种是使用数组字面量表示法,数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开。数组
var colors = ["red","blue","green"]; //建立一个包含3个字符串的数组 var names = []; //建立一个空数组
无论用什么方式建立的数组都有下面要讲的一些方法.
查看数组的长度,检查数组的长度可使用length属性。经过length属性能够获得数组的长度,由于数组的长度永远比数组的索引坐标大1,全部,还能够经过length往数组最后一位添加元素,甚至减小数组长度函数
//使用length查看数组长度 var colors = ["red","blue","green"]; var count = colors.length; alert(count);//3 //使用length舍去数组元素 colors.length = 2; //设置数组长度为2,最后一个元素被舍去 alert(colors); //red,blue alert(colors.length); //2 //使用length向数组添加元素 colors[colors.length] = "yello"; //项数组中增长元素 alert(colors); //red,blue,yello alert(colors.length); //3
检查一个值究竟是不是数组,使用Array.isArray()方法code
var colors = ["red","blue","green"]; if (Array.isArray(colors)){ alert(true); //true }
Array也是一个对象,因此也拥有toLocaleString(),toString()和valueOf()方法。
toString():方法会返回由数组中每一个元素字符串形式拼接成的一个由逗号分隔的字符串
valueOf():方法返回的仍是数组,可是若是使用alert(colors.valusOf())
返回的跟toString()返回的彻底同样,由于alert()接收到valueOf()传送来的数组,会再次调用toString()方法
toLocaleString():方法要而常常会返回与上面两个方法返回的值相同对象
数组能够模拟栈的方法,具体就是先进后出,提供push()方法接收不定的参数,从数组后面压入数组,提供pop()方法从数组末尾移除最后一项。
须要注意的是:push()方法返回值时修改后数组的长度,pop()返回值是移除的项。排序
var colors = ["red","blue","green"]; var count = colors.push("yello","black");//压入 alert(count); //5 var item = colors.pop(); //取得最后一项 alert(item); //black
列队方法区别于栈方法,栈方法是先进后出,列队方法是先进先出。
列队方法提供push()函数向数组末尾添加元素,返回值时修改后数组的长度。提供shift()方法移除数组中的第一个项.
列队方法还提供unshift()方法在数组的前端添加任意个项并返回新数组的长度,以此构成了双向列队。索引
//建立新数组,长度为3 var colors = ["red","blue","green"]; //使用push()向末尾添加两个元素,长度为5 var count = colors.push("yello","black");//压入 alert(count); //5 //移除数组前端的元素,长度为4 var item = colors.shift(); alert(item); //red //使用unshift()方法在前端添加一个元素,长度为5 var unCount = colors.unshift("white"); alert(unCount); //5
数组的从新排序主要有两种方法:
reserve():方法会反转数组的排血顺序。
sort():会按照升序排列数组,因为这个升序是按照字典顺序来的,因此可接收一个参数来指定排列顺序,这个参数是函数,函数接收两个值进行比较,若是第一个参数应该位于第二个以前则返回一个负数。
注意:reserve()和sort()方法的返回值是通过排序以后的数组ip
操做方法有几个经常使用的方法:
contact():方法能够基于当前数组中的全部项建立一个新数组
slice():方法是切片操做,接收两个参数,起始和结束为止,只有一个参数时,表示这个参数开始到结束。
splice():方法是切片方法的升级,主要用途是向数组的中部插入元素,接收三个参数,第一个参数是起始位置,第二个参数是要删除的元素项数,第三个参数能够是任意数量的,若是有的话就插入到前面两个参数的位置
//建立新数组 var colors = ["red","blue","green","red","black"]; //concat()方法 var colors1 = colors.concat(); var colors2 = colors.concat("1","2"); alert(colors1); //red,blue,green,red,black alert(colors2); //red,blue,green,red,black,1,2 //slice()方法 var colors3 = colors.slice(1,3); alert(colors3); //blue,green //splice()方法 //使用splice()方法删除 var removed = colors.splice(0,1);//删除第一项 alert(removed);//red 返回的数组中只包含一项 使用splice()方法插入 removed = colors.splice(1,0,"1","2");//从位置1开始插入两项 alert(colors); //red,1,2,blue,green,red,black alert(removed); //返回一个空数组 //使用splice()方法替换 removed = colors.splice(1,2,"Rocco","Bobi");//插入两项,删除两项项 alert(colors);//red,Rocco,Bobi,red,black alert(removed);//blue,green 返回的数组包含两项
位置方法主要有两个,全都接收两个参数,要查找的项和可选的表示查找起点位置的索引。若是查找到就返回要查找的项在数组中的下标,若是没有找到就返回-1
indexOf():从数组的开头开始向后查找
lastIndexOf():从数组的末尾开始向前查找
//建立新数组 var colors = ["red","blue","green","red","black"]; //从前日后查找 alert(colors.indexOf("red"));//0 //从后往前查找 alert(colors.lastIndexOf("red"));//3
数组的迭代方式比较多,可使用for循环的两种不一样使用方法,还可使用属于数组的5个迭代方法
首先看for循环迭代数组
//建立新数组 var colors = ["red","blue","green","red","black"]; //第一种for循环 for (var i=0; i<colors.length; i++){ alert(colors[i]); } //第二种for循环 for (var i in colors){ alert(colors[i]);//此处的i也是索引,不是数组的元素 }
数组定义的5个迭代方法
every():对数组中的每一项运行给定的函数,若是数组中的每个元素在该函数中都返回true,则返回true。
some():对数组中的每一项运行给定函数,若是该函数对任一项返回true,就会返回true。
filter():对数组中的每一项运行给定的函数,返回该函数会返回true的元素项组成的新数组。
forEach():对数组中的每一项运行给定的函数,这个方法没有返回值。
map():对数组中的每一项运行给定函数,返回每次函数调用的劫夺组成的数组。
var numbers = [1,2,3,4,5,4,3,2,1]; //every() var everyResult = numbers.every(function (item,index,array) { return (item > 2);//只有每个元素都大于2,结果才会返回true }); alert(everyResult);//false //some() var someResult = numbers.some(function (item,index,array) { return (item >2);//只要有一个元素大于2,结果就返回true }); alert(someResult);//true //filter() var filterResult = numbers.filter(function (item,index,array) { return (item > 3);//收集知足大于3的元素,组成一个新数组 }); alert(filterResult);//[4,5,4] //map() var mapResult = numbers.map(function (item,index,array) { return item*2; }); alert(mapResult);//[2,4,6,8,10,8,6,4,2] //forEach() var forEachResult = numbers.forEach(function (item,index,array) { // alert(item); //对数组的每一项执行该函数,没有返回值 })
数组的归并有两种两个函数,使用方法是同样的,不一样之处在于一个是从前向后,一个是从后向前。
reduce():从数组第一个开始,逐个遍历到最后
reduceRight():从数组的最后一个开始,逐个遍历到第一项
以上两个方法都接收4个参数,分别是:前一个值,当前值,项的索引,数组对象。每一次的遍历都会把结果传递到下次操做的前一个值上
var values = [1,2,3,4,5]; var sum = values.reduce(function (prev,cur,index,array) { return prev+cur; }); alert(sum);//15
以上是reduce()的使用方法,reduceRight()使用方法相同,只是从后向前迭代。