js中的Array类型
1.ECMAScript数组的每一项可以保存任何类型的数据。
2.ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。
3.创建数组基本方式有两种:
1.使用Array构造函数
var colors=new Array();
var colors=new Array(20);//可以传入数组要保存的项目数量
var colors=new Array("red","blue","green");//可以传入数组中应该包含的项。
var colors=new Array;//有效,在ECMAScript中,如果不给构造函数传递参数,则可以省略后面的那对圆括号
//在使用Array构造函数时也可以省略new操作符。省略new操作符的结果相同。
var colors=Array();
var colors=Array(3);
var colors=Array("red","blue","green");
2.使用数组字面量表示法
var colors=["red","blue","green"];
ps:错误写法,既省略new操作符,又省略圆括号,相当于指向了函数Array
var o=Array;
console.log(o.length);//1
console.log(o);//[Function: Array]
4.数组的length属性
length属性:1.保存数组的项数
2.它不是只读的:
var colors=["red","blue","green"];
colors.length=2;//可以设置数组长度,如果长度小于原数组的长度,会从数组的末尾移除项
console.log(colors[2]);//undefined
var colors=["red","blue","green"];
colors.length=4;//如果长度大于原数组的长度,会将数组末尾添加新项,新增的每一项都会取得undefined值
console.log(colors[3]);//undefined
//利用length属性也可以方便地在数组末尾添加新项
var colors=["red","blue","green"];
colors[colors.length]="black";
console.log(colors);//[ 'red', 'blue', 'green', 'black' ]
colors[colors.length]="brown";
console.log(colors);//[ 'red', 'blue', 'green', 'black', 'brown' ]
//当把一个值放在超出当前数组大小的位置上时,数组就会重新计算其长度值,未赋值的位置都会取得undefined值
var colors=["red","blue","green"];
colors[99]="black";
console.log(colors.length);//100
console.log(colors[20]);//undefined
检测数组
1.instanceof操作符
var colors=["red","blue","green"];
if(colors instanceof Array){
console.log("true");//true
}
注意:instanceof操作符的问题在于,它假定只有一个全局执行环境。对于一个网页,或者一个全局作用域而言,使用instanceof操作符就能得到满意的结果。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。
2.Array.isArray()方法。这个方法的目的是最终确定某个值到底是不是数组,而不管他是在哪个全局执行环境中创建的。
转换方法
所有对象都具有toLocaleString()、toString()和valueOf()方法。
valueOf()返回数组本身,
toString()方法返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。
var colors=["red","blue","green"];
console.log(colors.toString());//red,blue,green
console.log(colors.valueOf());//[ 'red', 'blue', 'green' ]
console.log(colors);//[ 'red', 'blue', 'green' ]
join()方法
把数组对象的每个元素转换为字符串,传入参数为每个元素之间的分隔符,返回一个字符串。如果不给join()方法传入任何值,或者给它传入undefined,则使用逗号作为分隔符。
var colors=["red","blue","green"];
console.log(colors.join("|"));//red|blue|green
push()
可以接受任意数量的参数,把它们逐个添加到数组末尾,返回修改后数组的长度。改变原数组
栈方法
pop():从数组末尾移除最后一项,返回移除的项。改变原数组。
队列方法
shift():移除数组中的第一个项,返回移除的项,改变原数组。
unshift()
可以接受任意数量的参数,把它们逐个添加到数组前端,返回修改后数组的长度。改变原数组
重排序方法
reverse():反转数组项的顺序。
sort():
默认情况,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串。返回排序后的数组。
sort()方法还可以接收一个比较函数作为参数,比较函数接收两个参数,返回两个参数的相对位置,-1表示第一个参数在第二个参数之前,0表示两个参数相等,1表示第一个参数在第二个参数之后。
var values=[0,10,5,1,15];
console.log(values.sort());//[ 0, 1, 10, 15, 5 ]//按字符串大小
values.sort(function(value1,value2){
return value2-value1;
});
console.log(values);//[ 15, 10, 5, 1, 0 ]降序
values.sort(function(value1,value2){
return value1-value2;
})
console.log(values);//[ 0, 1, 5, 10, 15 ]升序
操作方法
1.concat()
2.slice()
3.splice()
位置方法
注意:在比较第一个参数与数组中的每一项时,会使用全等操作符,要求查找的项必须严格相等。
1.indexOf()
1.indexOf()
2.lastIndexOf()
迭代方法
1.every()
2.filter()
3.forEach()
4.map()
5.some()
归并方法
reduce():从数组的第一项开始,逐个遍历到最后。接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。
reduceRight():从数组的最后一项开始,向前遍历到第一项。接收两个参数:一个在每一项上调用的函数和(可选的)作为归并基础的初始值。传给reduce()和reduceRight()的函数接收4个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。第一次迭代发生在数组的第二项上,因此第一个参数是数组的第一项,第二个参数就是数组的第二项。
var values=[1,2,3,4,5];
var sum=values.reduce(function(pre,cur,index,array){
return pre+cur;
},10)
console.log(sum);//25