一、数组的创建
注:ECMAscript数组的每一项都可以保存任何类型的数据
1.1Array构造函数
var colors = new Array();
如果预先知道数组要保存的项目数量,也可以给构造函数传递该数量:
var colors = new Array(20);
也可以向构造函数传递数组中应该包含的项:
var colors = new Array("red", "blue", "green");
给构造函数传递一个值也可以创建数组:
如果传递的数值,则创建包含该数值个项的数组,
如果传递的是其他值,则创建包含这个值的只有一项的数组:
1 var colors = new Array(3); 2 var names = new Array("Greg");
1.2字面量表示法
数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开:
1 var colors = ["red", "blue", "green"]; //创建一个包含3个字符串的数组2 var names = [];//创建一个空数组3var values = [1,2,]; //不要这样,会创建一个2或3项的数组4var options = [,,,,,];//会创建一个5或6项的数组
二、数组的访问
2.1访问方法
在读取和设置数组的值时,要用方括号并提供相应值的基于0的数字索引:
1 var colors = ["red", "blue", "green"]; //定义一个字符串数组2 alert(colors[0]); //显示第一项3 colors[2]="black";//修改第一项4 colors[3]="brown";//新增第一项
2.2length属性
数组的项数保存在length属性中,这个属性始终返回0或者更大的值。
1 var colors = ["red", "blue", "green"]; 2 var name=[];3 alert(colors.length);//34 alert(name.length);//0
数组length属性不是只读的,通过设置这个属性,可以从数组的末尾移除项或者向数组中添加新项。看下面的例子:
1 var colors = ["red", "blue", "green"]; 2 colors.length = 2;3 alert(colors[2]);//undefined
上述例子中末尾的一项被移除了。
var colors = ["red", "blue", "green"]; colors.length = 4; alert(colors[3]);//undefined
新增的一项获得undefined值。
1 var colors = ["red", "blue", "green"]; 2 colors[colors.length] = "black"; //在位置3添加一种颜色3 colors[colors.length] = "brown"; //在位置4添加另一种颜色4 5 alert(colors.length); //56 alert(colors[3]); //black7 alert(colors[4]); //brown
三、转换方法
valueOf():返回数组
toString():返回由数组每个值的字符串形式拼接而成的一个以逗号分隔的字符串。为了创建这个字符串会调用数组每一项的toString()方法
toLocaleString():返回由数组每个值的字符串形式拼接而成的一个以逗号分隔的字符串。为了创建这个字符串会调用数组每一项的toLocaleString()方法
1 var person1 = { 2 toLocaleString : function () { 3 return "Nikolaos"; 4 }, 5 6 toString : function() { 7 return "Nicholas"; 8 } 9 };10 11 var person2 = {12 toLocaleString : function () {13 return "Grigorios";14 },15 16 toString : function() {17 return "Greg";18 }19 };20 21 var people = [person1, person2];22 console.log(person1);23 console.log(people);24 alert(people); //Nicholas,Greg25 alert(people.toString()); //Nicholas,Greg26 alert(people.toLocaleString()); //Nikolaos,Grigorios
以上3种方法在默认情况下都会以逗号分隔的字符串形式返回数组项。join()方法,可以使用不同的分隔符来构建这个字符串。join()方法只接受一个参数,用作分隔符的字符串,然后返回包含所有数组项的字符串:
1 var colors = ["red", "green", "blue"];2 alert(colors.join(",")); //red,green,blue3 alert(colors.join("||")); //red||green||blue
如果不给join方法传入任何值,或者传入undefined,则用逗号作为分隔符。
四、栈方法
栈:一种LIFO(Last-In—First-Out)后进先出的数据结构,新添加的项会被最早移除。而栈中项的推入(插入)和弹出(移除),只发生在栈的顶部。
利用push()+pop()方法可以实现类似栈的行为。
push():接受任意数量的参数,把他们逐个添加到数组末尾,并返回修改后数组的长度。
pop():从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
栈案例:
1 var colors = new Array(); 2 var count = colors.push("red", "green"); //推入两项 3 alert(count); //2 4 5 count = colors.push("black"); //再推入一项 6 alert(count); //3 7 8 var item = colors.pop(); //取得最后一项 9 alert(item); //"black"10 alert(colors.length); //2
五、队列方法
队列:一种FIFO(First-In—First-Out)先进先出的数据结构。
shift():能够移除数组中的第一个项并返回该项,同时将数组长度-1.
使用shift()+push()方法,可以像使用队列一样使用数组。
队列案例:
1 var colors = new Array(); 2 var count = colors.push("red", "green"); //推入两个项 3 alert(count); //2 4 5 count = colors.push("black"); //再推入一个项 6 alert(count); //3 7 8 var item = colors.shift(); //获取第一项 9 alert(item); //"red"10 alert(colors.length); //2
unShift():能够在数组前端添加任意个项并返回新数组的长度.
使用unShift()和pop()方法能从反方向模拟队列
案例:
1 var colors = new Array(); 2 var count = colors.unshift("red", "green"); //推入两项 3 alert(count); //2 4 5 count = colors.unshift("black"); //再推入一项 6 alert(count); //3 7 8 var item = colors.pop(); //取得最后一项 9 alert(item); //"green"10 alert(colors.length); //2
六、重排序方法
6.1reverse()
反转数组项的顺序
1 var values = [1, 2, 3, 4, 5];2 values.reverse();3 alert(values); //5,4,3,2,1
6.2sort()
sort() 方法用于对数组的元素进行排序。
语法:数组名称.sort(参数)
参数:可选的,规定数组的排序方式。要么没有参数,要么只能是函数作为参数
返回值:对数组的引用,数组在原数组上进行排序,不生成副本。
如果调用该方法时没有使用参数,将按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
例如:
1 var fruit = ['apples', 'bananas', 'Cherries'];2 fruit.sort(); // ['Cherries', 'apples', 'bananas'];
大写字母的编码比小写字母靠前。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
对于sort来说:
举一个很直观的例子返回值大于0:
1 function sortNumber(a, b) 2 { 3 return 100;//返回值永远大于0,a在b之后,所以,数组会逆序排列 4 } 5 6 var arr = new Array(6) 7 arr[0] = "10" 8 arr[1] = "5" 9 arr[2] = "40"10 arr[3] = "150"11 arr[4] = "1000"12 arr[5] = "1"13 document.write(arr.sort(sortNumber))
上述例子输出:1,1000,150,40,5,10
再看返回值小于0的例子:
1 function sortNumber(a, b) 2 { 3 return -100;//返回值永远小于0,a在b之前,所以数组排列顺序不变 4 } 5 6 var arr = new Array(6) 7 arr[0] = "10" 8 arr[1] = "5" 9 arr[2] = "40"10 arr[3] = "150"11 arr[4] = "1000"12 arr[5] = "1"13 14 document.write(arr.sort(sortNumber))
上述例子输出:10,5,40,150,1000,1
再看一个小到大排列的例子:
1 function sortNumber(a, b) 2 { 3 return a -b//如果返回值大于0,b在a前,如果返回值小于0,那么a在b前,也就是小的数在前,大的数在后。 4 } 5 6 var arr = new Array(6) 7 arr[0] = "10" 8 arr[1] = "5" 9 arr[2] = "40"10 arr[3] = "150"11 arr[4] = "1000"12 arr[5] = "1"13 14 document.write(arr.sort(sortNumber))
上述代码输出:1,5,10,40,150,1000
同样,一个从大到小的例子:
1 function sortNumber(a, b) 2 { 3 return b-a;//返回值大于0,b在前,返回值小于0,a在前,也就是大的数总是在小的数前面。 4 } 5 6 var arr = new Array(6) 7 arr[0] = "10" 8 arr[1] = "5" 9 arr[2] = "40"10 arr[3] = "150"11 arr[4] = "1000"12 arr[5] = "1"13 14 document.wri
新闻热点
疑难解答