JavaScript 1.8 数组

来源:互联网 发布:java调用ireport报表 编辑:程序博客网 时间:2024/06/06 02:01

JavaScript 1.8 数组

 

1.数组的创建方法

法一:

var x = new Array();   //此时数组长度为0

var x = new Array(3);  //创建的同时指定长度

var x = new Array("a","b","c");   //创建的同时赋值

法二:

var x = ["a","b","c"];

var x = [1,2,3];

1ECMAScript数组可以保存任何数据,比如第一个位置保存数组,第二个位置保存字符串,第三个位置保存对象。

2ECMAScript数组的大小是动态调整的,随着数据的添加自动增加长度。

3:数组项以2逗号隔开,最后一项不加逗号。

 

2.数组的读取与设置

var x = ["a","b","c"];

alert(x[0]);   //读取,以方括号加下标

x[0] = "A";   //修改第一项"a""A"

x[3] = "d";   //新增第四项为"d"

 

3.数组的length属性

①length的值会自动增加

var x = new Array();

alert(x.length);  //0

x[0] = "a";      //此时x.length=1

x[10] = "10";    //此时x.length=11,但x[1]~x[9]都是空,undefined

注:可以利用length属性,向数组末尾添加新项,例如:

var x = ["a","b","c"];

x[x.length] = "d";  //新增第四项为"d"

②length不是只读的,可以修改,强制设置length的值,从末尾删除项

var x = ["a","b","c","d","e"];

x.length = 3;  //"d","e"项被移除

 

4.toString()toLocaleString()valueOf()方法。

所有对象都拥有这三种方法,其中:

tostring返回由每个值的字符串形式拼接而成的以,隔开的字符串。

tolocalstring就是根据不同的语言环境吧对象转成字符串,实际上totolocalstring是有缺省参数的,如tolocalstring('ko-ka')是根据韩国的语言格式转化,显示出来就是鸟文。

valueof返回数组,是一个获取对象原始值的方法,数组的原始值当然是它本身。

var x = ["a","b","c","d","e",11,22];alert(x.toString());     //a,b,c,d,e,11,22alert(x.toLocaleString());//a,b,c,d,e,11,22alert(x.valueOf());     //a,b,c,d,e,11,22alert(x);             //a,b,c,d,e,11,22


5.栈方法。栈,一个口,后进先出。

ECMAScript是通过push()pop()方法来实现栈行为的。

push():推入,接受n项参数,添加到数组末尾,返回修改后数组长度。

pop():弹出,无参数,从数组末尾移除最后项,自动减少length值,返回被移除项。

var x = ["a","b","c","d"];var count = x.push("e","f");  //推入两项,数组长度count=6var y = x.pop();  //弹出最后项,y="f"alert(x.length);  //数组长度=5


6.队列方法。队列,两个口,前进先出。

ECMAScript是通过push()shift()unshift()pop()方法来实现队列行为的。

shift():移除数组第一项,返回移除项。shift上档转换,移除第一项。

unshift():在数组前端添加n项,返回修改后数组长度。

var x = ["a","b","c","d"];x.push("e","f");x.shift();x.shift();alert(x);  //c,d,e,f x.unshift("1","2");x.pop();x.pop();  alert(x);  //1,2,c,d

 

7.重排序方法

反转数组项的顺序,reverse()方法

var x = ["a","b","c","d"];x.reverse();alert(x);  //d,c,b,a

 

排序,sort()方法,从小到大排序。原数组被改变。

var x = [1,5,10,15,0];var y = x.sort();   //sort()返回值是排序后数组。alert(x);  //0,1,10,15,5alert(y);  //0,1,10,15,5

原因:sort()会将数组项转换成字符串后,在进行比较,所以效果不理想。

解决方法:

//编写比较函数,当value1应该在value2之前,返回-1 !!!function compare(value1,value2){  if(value1<value2){    return -1;  } else if(value1>value2){    return 1;  }else{    return 0;  }}//在使用sort()时,将函数作为参数传入即可。var x = [1,5,10,15,0];x.sort(compare);alert(x);  //0,1,5,10,15/**********************************************************若想降序排列,互换return -1;和return 1;的位置比较函数还可写成:function compare(value1,value2){  return value1-value2;}**********************************************************/

 

8.操作方法

连接数组concat()

创建数组副本,并将参数添加到副本末尾,返回这个新数组。不影响原数组。

var x = ["a","b","c"];var y = x.concat("d",["e","f"]);  //添加字符串"d"和数组["e","f"]alert(x);   //a,b,calert(x);   //a,b,c,d,e,f

 

剪切数组slice()

对数组截取一段,创建新数组,返回这个新数组。不影响原数组。

slice(a,b)a<b,从数组[a]开始(包括[a]),到[b]结束(不包括[b])

var x = ["a","b","c","d","e"];var y = x.concat(1);   //从x[1]开始,到最后var z = x.concat(1,4);   //从x[1]开始,到x[4],但不包括x[4]alert(y);   //b,c,d,ealert(z);   //b,c,d

注:若a>=b,返回空;若为负数,如slice(-2,-1)加上数组长度,等同于slice(3,4)

 

删除,插入,替换数组splice(),格式:

splice(要删除第一项位置,要删除项数,要插入的项···)

改变原数组,返回值为被删除的项。

例如:var x = ["a","b","c"];

删除

var y=x.splice(0,1);

x=["b","c"];

y=["a"];

删除n项包括第一项

插入

var y=x.splice(0,0,"A","B");

x=["A","B","a","b","c"];

y=

插入n项插之前

替换

var y=x.splice(0,2,"A","B");

x=["A","B","c"];

y=["a","b"];

替换在删除位置

 

9.位置方法,查找某项在数组中位置(下标)

从前往后:indexOf(要查找项,查找起点下标(可选))

从后往前:lastIndexOf(要查找项,查找起点下标(可选))

var x = ["a","b","c","d","c","b","a"];alert(x.indexOf("b"));      //1,从前往后查找"b",找到的是第一个alert(x.lastIndexOf("b"));   //5,从后往前查找"b",找到的是第二个alert(x.indexOf("b",3));     //5,从下标[3],即"d"开始,从前往后查找"b",找到的是第二个alert(x.lastIndexOf("b",3));  //1,从下标[3],即"d"开始,从后往前查找"b",找到的是第一个

 

10.迭代方法,所谓迭代,就是遍历数组并进行一些操作。

15种迭代方法都不改变原数组。

2:传入这5种方法的函数格式:function(item,index,array){···}

其中item数组项的值,index数组项标号,array数组本身

3:可以从其他参数,但代表的意义一样:function(a,b,c){···}

其中a数组项的值,b数组项标号,c数组本身

方法

操作

返回值

every()

对数组的每一项运行给定的函数

每一项都是true,返回值:true

some()

对数组的每一项运行给定的函数

有一项是true,  返回值:true

forEach()

对数组的每一项运行给定的函数

无返回值

filter()

对数组的每一项运行给定的函数

返回值:true的项组成的数组

map()

对数组的每一项运行给定的函数

返回值:经函数运算后的所有项组成的数组

范例:

var numbers = [1,2,3,4,5,6,7]; var x1 = numbers.every(function(item,index,array){  return (item>2);        //遍历数组,第index项>2时,index项返回true});alert(x1);   //每一项都是true,才返回值true。所以结果false var x2 = numbers.some(function(item,index,array){  return (item>2);        //遍历数组,第index项>2时,index项返回true});alert(x2);   //有一项是true,就返回值true。所以结果true numbers.forEach(function(item,index,array){  //执行一些操作,本质上与使用for循环迭代数组一样。}); var x3 = numbers.filter(function(item,index,array){  return (item>2);        //遍历数组,第index项>2时,index项返回true});alert(x3);   //结果为:3,4,5,6,7 var x4 = numbers.map(function(item,index,array){  return (item*2);        //遍历数组,第index项返回item*2});alert(x4);   //结果为:2,4,6,8,10,12,14

 

11.归并方法,reduce()reduceRight()

注:传入这5种方法的函数格式:function(prev,cur,index,array){···}

其中prev前一个值,cur当前值,index数组项标号,array数组本身

var numbers = [1,2,3,4,5];var sum = numbers.reduce(function(pre,cur,index,array){  return prev+cur;});/**********************************************************遍历数组,会将上一层的返回值作为下一次的prev前一个值第1次:pre=0,cur=1,返回值1第2次:pre=1,cur=2,返回值3第3次:pre=3,cur=3,返回值6第4次:pre=6,cur=4,返回值10第5次:pre=10,cur=5,返回值15 若reduceRight():第1次:pre=0,cur=5,返回值5第2次:pre=5,cur=4,返回值9第3次:pre=9,cur=3,返回值12第4次:pre=12,cur=2,返回值14第5次:pre=14,cur=1,返回值15**********************************************************/

0 0