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];
注1:ECMAScript数组可以保存任何数据,比如第一个位置保存数组,第二个位置保存字符串,第三个位置保存对象。
注2:ECMAScript数组的大小是动态调整的,随着数据的添加自动增加长度。
注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.迭代方法,所谓迭代,就是遍历数组并进行一些操作。
注1:5种迭代方法都不改变原数组。
注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**********************************************************/
- JavaScript 1.8 数组
- javascript 数组
- JavaScript 数组
- Javascript数组
- javascript数组
- JavaScript 数组
- JavaScript 数组
- javascript数组
- javascript 数组
- javascript数组
- javaScript 数组
- JavaScript数组
- javascript数组
- javascript 数组
- javascript数组
- javascript数组
- JavaScript数组
- javascript数组
- 青铜莲花池(bfs)
- Codeforces 798D Mike and distribution 构造
- LeetCode 64. Minimum Path Sum
- PageHelper插件的使用方法
- C#winform实现增删改查
- JavaScript 1.8 数组
- 技术方向的选择
- http client/server for asyncio
- 循环队列顺序储存
- Django开发环境与生产环境的设置
- 问题 D: 有解吗?
- JSON 数据解析
- Linux进程管理常用命令
- LeetCode #15 3Sum