引用类型—Array类型

ECMAScript数组与其它语言数组一样,都是数据的有序列表。但是ECMAScript数组的每一项可以保存任何类型的数据。而且,ECMAScript数组是可以动态调整的。
1.创建和修改数组
·创建数组

1 var colors=new Array(20); //创建长度位20的数组
2 var colors=Array(20); //可以省略new操作符
3 var colors=Array("red","blue","green");
4
5 //数组字面量表示法
6 var colors=["red","blue","green"];
7 var values=[1,2,3];

.修改数组

1 var colors=["red","blue","green"];
2 alert(colors[0]); //显示第一项
3 colors[2]="black"; //修改第三项
4 colors[3]="brown"; //新增第四项

·数组的length活用
数组的length不是只读的,重新设置length可以移出项,修改项,新增项,修改数组的长度。
2.检测数组----Array.isArray()
3.转换方法******
toString():返回以逗号隔开的字符串 丨 valueOf():返回的是数组 丨 alert():会在后台调用toString()方法,而不是toLocaleString()方法 丨 join():参数是符号,此符号将代替逗号隔开字符串
4.
栈方法和队列方法**
栈方法:push():在末尾添加 pop():获得最后一项并移除
队列方法:shift():在首项移除 unshift():在首项添加
5.数组重排序
reverse()方法:反转数组的顺序 丨 sort()方法:按照传入的函数重新排序
比较函数:

1 function compare(value1,value2){
2 return value2-value1;
3 };

6.操作方法
concat():先复制已有的数组,然后将参数添加到副本的末尾,如果参数是值,则直接添加,如果参数是数组,则将每一项都添加到副本的末尾。往一个数组后面加很多项用此方法。

1 var colors=["red","green","blue"];
2 var colors2=colors.concat("yellow",["black","brown"]);
3 alert(colors); //red,green,blue
4 alert(colors2); //red,green,blue,yellow,black,brown

slice():从原数组中截取某一部分用此方法

1 var colors=["red","blue","green","black","yellow"];
2 var colors2=colors.slice(1); //从第二个数到最后
3 var colors3=colors.slice(1,4); //从第二个数到第五个数,但是不包括第五个数
4 alert(colors2); //blue,green,black,yellow
5 alert(colors3); //blue,green,black
6 //如果参数里有负数,则用数组长度加上该数来确定相应的位置

splice():最强大的数组操作方法

 1 /*spice()方法是最强大的数组方法,它有三个参数 ,依次为起始位置,要删除的项数,要添加的项*/
 2 var colors=["red","green","blue"];
 3 var removed=colors.splice(0,1); /*删除第一行*/
 4 alert(colors); /*green,blue*/
 5 alert(removed); /*red,返回的数组中只包含一项,即删除的那一项*/
 6
 7 removed=colors.splice(1,0,"yellow","orannge"); //从位置一开始插入两项 
 8 alert(colors); //green,yellow,orange,blue注意,yellow在位置1
 9 alert(removed); //返回的是一个空数组
 10 
 11 removed=colors.splice(1,1,"red","purple"); //插入两项,删除一项
 12 alert(colors); //green,red,purple,orange,blue
 13 alert(removed); //yellow,返回的数组中只包含一项
 14 /*注意,splice()返回的是删除的项,而不是改变后的原数组*/

7.迭代方法
every():每一项运行函数,只有每一项都返回true,最后才返回true
some():每一项都运行函数,任一项返回true最后就会返回true
forEach():不会返回值,作用其实和for循环一样
filter():每一项运行函数,返回该函数会返回true的项组成的数组
map():每一项都运行函数,返回每次函数调用的结果组成的数组

1 /*every()和some()返回true或者false,不同的是,运行函数,every要求函数对每一项都返回true才会返回true,而some只要求任一项返回true就返回true*/
2 var numbers=[1,2,3,4,5,4,3,2,1];
3  
4 var everyResult=numbers.every(function(item,index,array){
5 return(item>2); 
6 });
7 alert(everyResult); //false
8  
9 var someResult=numbers.some(function(item,index,array){
10 return(item>2);
11 });
12 alert(someResult); //true
13 
14 /*filter()每一项运行函数,返回该函数会返回true的项组成的数组*/
15 var numbers=[1,2,3,4,5,4,3,2,1];
16 var filterResult=numbers.filter(function(item,index,array){
17 return(item>2);
18 });
19 alert(filterResult); //[3,4,5,4,3]
20 
21 /*forEach()不返回值,作用其实for循环一样*/
22
23 /*map()方法:每一项运行函数,返回每次函数调用的结果组成的数组*/
24 var numbers=[1,2,3,4,5,4,3,2,1];
25 var mapNumbers=numbers.map(function(item,index,array){
26 return item*2;
27 });
28 alert(mapNumbers); //2,4,6,8,10,8,6,4,2

8.归并方法
reduce()和reduceRight()方法都会迭代数组的每一项,然后构建一个最终返回的值。reduce()正序,reduceRight()逆序。这两个方法都接收两个参数:在每一项上调用的函数和最为归并的初始值。而这个函数接收4个参数
前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为一个参数返回给下一项。第一次迭代发生在数组的第二项,因此,第一个参数是数组的第一项,第二个参数是数组的第二项。

1 var values=[1,2,3,4,5];
2 var sum=values.reduce(function(prev,cut,index,array){
3 return prev+cut;
4 },5);
5 alert(sum); //20
6 /*这两个方法都接收两个参数:一个在每一项上调用的函数和(可选)作为归并基础的初始值。传给reduce()和reduceRight()的函数接收4个参数
7  前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项。因此第一个参数是数组的第一项8  第二个参数是数组的第二项。
9  * */

9.位置方法
indexOf():正序索引 lastIndexOf():逆序索引 在比较参数和数组中的项时,必须严格相等,相当于使用===操作符,没有找到返回-1

1 var numbers=[1,2,3,4,5,4,3,2,1]; 
2 alert(numbers.indexOf(4)); //3 
3 alert(numbers.lastIndexOf(4)); //5 
4  
5 alert(numbers.indexOf(4,4)); //5 从第五的数开始往后检索,所以第一个4并没有被检索到 
6 alert(numbers.lastIndexOf(4,4)); //3 从倒数第五个数开始检索 
7  
8 var person={name:"Nicholas"}; 
9 var people=[{name:"Nicholas"}];
10 
11 var morePeople=[person];
12 
13 alert(people.indexOf(person)); //-1
14 alert(morePeople.indexOf(person)); //0
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容