JavaScript学习笔记——引用类型:Array类型

在JavaScript中,数组中的每一项可以保存任何类型的数据,比如,数组的第一项可以是字符串,第二项可以保存数值,第三项可以是对象。

创建数组的方法有两种,第一种是使用Array()构造函数,

var color = new Array();
var val = new Array(3);//数组长度为3
var name = new Array("Greg");//包含“Greg”一项

第二种是采用字面量表示法,数组字面量由一对方括号表示,多组数据之间用逗号隔开

var color = ["blue","red"];

数组的length属性不是只读的,通过设置这个属性,可以从数组的末尾设置或添加新项。

var color = ["blue","red","green"];
color.length = 2;
alert(color[2]);//undefined,删掉了第三项
color.length = 3;
alert(color[2]);//undefined,新增了一项
color[color.length] = "yellow";//新增了一项

1、转换方法
所有对象都具有toLocalSring(),toString(),valueOf()方法。

var color = ["blue","red","green"];
alert(color);//blue,red,green
alert(color.toString());//blue,red,green
alert(color.valueOf());//blue,red,green

由于alert()要接受字符串参数,所以它在后台会调用toString方法,所以alert(color)与alert(color.toString())输出相同。但当toLocalSring函数与toString函数定义返回内容不同时,输出也不同。
上述三种方法,在默认情况下会以逗号分隔,但如果使用join()方法,可以使用不同分隔符返回数组项,但一次只能接受一个参数。

alert(color.join("||"));//blue||red||green

2、栈方法
栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构,栈的插入(叫做推入)和移除(叫做弹出)都发生在栈顶,用push()和pop()实现。
push()方法可以接受任意数量的参数,把他们诸葛添加到数组末尾,并返回修改后数组的长度。pop()方法则从数组末尾移除最后一项,减少数组的length值,然后返回删除的项。

var color = ["blue","red","green"];
var count = color.push("yellow");
alert(count);//4
var item = color.pop();
alert(item);//yellow
alert(color.length);//3

3、队列方法
队列数据结构访问规则是FIFO(First-In-First-Out,先进先出).
shift()方法能够移除数组中第一个项并返回该项,同时将数组长度减一。
unshift()方法与shift()方法相反,可以在数组的前端添加新项并返回新数组的长度。

var color = ["blue","red","green"];
var count = color.push("yellow");//push()方法
alert(count);//4
var item = color.shift();//shift()方法
alert(item);//blue
alert(color.length);//3
var count1 = color.unshif("black");//unshift()方法
alert(count1);//4
var item1 = color.pop();//pop()方法
alert(item1);//green
alert(color.length);//3

4、重排序方法
reverse()方法:反转数组的顺序。
sort()方法:默认情况下,按升序排列数组项,会先调用每个数组项的toString方法,然后比较得到的数组项,确定如何排序,即使每个数组项都是数值,此方法比较的也是字符串。

var value = [[1,5,3,17,4]];
val.sort();//[1, 17, 3, 4, 5]

比较函数用于接收两个参数,如果第一个参数应该位于第二个之前则返回一个负数,如果相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数,sort方法括号内传参数只能传函数,用来决定数组升序或降序,也可以不传,不可以传其他参数。

function compare(value1,value2){
    if(value1<value2){
        return -1;}
    else if(value1>value2){
        return 1;}
    else{
        return 0;}
}
var va = [0,1,5,10,15];
va.sort(compare);//[0, 1, 5, 10, 15]

5、操作方法
concat()方法:合并数组(创建了一个新数组,原数组不变) 此方法首先基于当前数组创建一个副本,然后将接收到的参数添加到这个副本的末尾,返回新构建的数组。如果没有给concat()传递参数的情况下,它只是复制当前数组并返回副本。

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

slice()方法:取得数组的部分元素
基于当前数组中的一或多个项创建一个新数组(不影响原始数组)。
接收一个参数:返回从该参数指定位置开始(下标值)到末尾的所有项
接收两个参数:返回起始位置(不是下标值)到结束位置之间的元素,不包括结束位置
如果slice方法的参数中有一个负数,则用该数组的长度加上这个数来确定相应的位置

var color = ['red','green','blue','yellow','purple'];
var color1=color.slice(1);//'green','blue','yellow','purple' 
var color2=color.slice(1,4);  //'green','blue','yellow' 

splice()方法:
删除:要指定两个参数,要删除的第一项的位置和删除的项数。例如:splice(0,2)会删除数组中的前两项。
插入:要指定三个参数,起始位置,0(要删除的项数),要插入的项,若要插入多个项,可以继续传入参数。例如:splice(2,0,”red”,”green”)会从当前数组的位置2开始插入字符串“red”,“green”。
替换:要指定三个参数,起始位置,要替换的项数,要插入的替换项。插入的项数不必和与删除的项数相等。例如:splice(2,1,”red”,”green”)会删除当前数组位置2的项,然后再从位置2开始插入字符串“red”,“green”。
6、位置方法
indexOf() 返回查找项的下标值,没有返回-1。 接收两个参数,要查找的项 ,表示要查找的起点位置的索引(可选)
lastIndexOf() 和indexOf()一样,只不过是从末尾向前查找

var number=[1,2,3,4,35,6,7];  
alert(number.indexOf(3)) //2 
alert(number.indexOf(3, 3));//4 

7、迭代方法
every(): 对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回 true;

filter(): 对数组中的每一项运行给定的函数,返回该函数会返回true的项的组成的数组。

forEach(): 对数组中的每一项运行给定的函数,这个方法没有返回值。

map(): 对数组中的每一项运行给定的函数,返回该函数调用结果的组成的数组。

some(): 对数组中的每一项运行给定的函数, 如果该函数对任一项返回true,则返回true。

var number = [1, 2, 3, 4, 5, 4, 3, 2, 1];

var everyResult = numbers.every(function(item, index, array){
   return(item > 2); 
})
alert(everyResult);   //false

var someResult = numbers.some(function(item, index, array){
   return(item > 2); 
})
alert(someResult);   //true

var filterResult = numbers.filter(function(item, index, array){
   return(item > 2); 
})
alert(filterResult);   //[3, 4, 5, 4, 3]

var mapResult = numbers.map(function(item, index, array){
   return item * 2 ; 
})
alert(mapResult);   //[2, 4, 6, 8, 10, 8, 6, 4, 2]

var i = 0;
numbers.forEach(function(item, index, array){
    i++; 
})
alert(i);   //9

9、归并方法
reduce()和reduceRight(),这两个方法都会迭代数组的所有项然后构建一个最终返回的值,其中,reduce()从数组第一项开始,遍历到最后,reduceRight()从数组最后一项开始,向前遍历到第一项。

var value = [1,2,3,4,5];
var sum = value.reduce(
    function (prev,cur,index,array){
        return prev+cur;}
);//15
发布了41 篇原创文章 · 获赞 13 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章