5.2 数组类型
一.创建新数组
i.var variable = new Array(); variable=["","",""]; //先声明创建数组,再往里面添加元素
ii.var variable=["","",""]; //直接创建数组并添加元素
二.length属性
数组的length不是只读的,通过设置这个属性,可以从数组的末尾移除项或者添加新项。
i.var colors=["green","red","purple"];
colors.length=2;
alert(colors[2]); //undefined 因为规定数组长度只有2 所以colors[2]被移除。
ii.var colors=["green","red","purple"];
colors[colors.length]="blue"; //因为数组最后一项的索引是length-1,所以这样做可以在数组最后添加新项
三.检测数组
i.instanceof操作符
if (variable instanceof Array){} //语法 variable instanceof variabletype ,若检测到变量为相应检测类型,则返回true ,但是问题在于它假定只有一个全局执行环境
ii.Array.isArray()方法
if (Array.isArray(variable)){} //语法:Array.isArray(variable)
四.转换方法
i.valueOf() 方法 //返回最适合该对象类型的原始值
ii.toString() 方法 //将该对象类型的原始值以字符串的形式返回
iii.toLocaleString() 方法 //先对数组的每一个元素使用toLacaleString()方法,再以逗号分隔符将生成的字符串连接起来,形成一个新的字符串
iv.join() 方法 //可以使用不同的分隔符来构建字符串 例如:variable.join("||") 会生成一个分隔符为 || 的数组
五.栈方法和队列方法
i.push() 方法 //接收任意数量的参数,将他们逐个加到数组末尾,并返回 数组修改后的长度
var animal=new Array();
var number_=animal.push("Monkey","Dog");
document.write(number_); //2
ii.pop() 方法 //从数组末端移除最后一项,减少数组的length值,然后返回移除的项
iii.shift()方法 //移除数组的第一项,使数组长度减一,并返回被移除的项
iv.unshift()方法 //能在数组前端添加任意个项,并返回数组 修改后的长度
六.重排序方法
i.reverse()方法 //反转数组项的顺序
var values=[1,2,3,4,5];
values.reverse();
alert(values); //5,4,3,2,1
ii.sort()方法 ** //按升序排列数组项
语法:arrayobject.sort(sortby);
参数可选,规定排序函数,必须是一个函数。
a)若没有参数,则按照字符编码的顺序排列。
var values=[1,5,15,11];
values.sort();
alert(values); // 1,11,15,5
b)若有参数,则为一个比较函数。比较函数:比较两个值,然后返回一个用于说明这两个值相对顺序的数值,函数应该有两个参数。
若a小于b,排序后a在b之前,返回一个负值。
若a大于b,排序后b在a之前,返回一个正值。
若a等于b,返回数值0,不进行排序。
function compare(value,value1) //这个函数适用于大多数数据类型
{
if(value<value1)
{
return -1;
}
else if (value>value1)
{
return 1;
}
else
{
retuen 0;
}
}
var values=[1,5,15,11];
values.sort(compare);
alert(values); // 1,5,11,15
对于数值类型或者其valueof()方法会返回数值类型的对象类型,可以使用如下的compare函数
function compare(value,value1) {
return value1-value; }
七.操作方法
i.concat()方法 //基于当前数组的所有项创建一个新数组,具体方法是先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末端,最后返回新构建的数组。
var color=["red","green"];
var color1=color.concat("blue",["black","white"]);
alert(color1); //red,green,blue,black,white
ii.slice()方法 //基于当前数组的一或多个项创建一个新数组,slice()方法可以接收一到二个参数,用于指定返回项的起始和结束位置。
//只有一个参数,表示从数组的该位置到数组末端的所有项。如果有两个参数,该方法返回起始和结束位置之间的项--但不包括结束位置的项。
var numBer=[1,2,3,4,5,6];
var numBer1=numBer.slice(1,3);
alert(numBer1); //2,3
iii.splice()方法
spiice()方法有三个参数,第一个参数表示指定位置,第二个参数表示从指定位置开始需要删除的项数,第三个参数表示在指定位置需要插入的项。
splice()方法始终都会返回一个数组,该数组中包含从原数组中删除的项。
使用这种方法的三种方式
a)删除 删除任意数量的项,指定前两个参数
value.splice(0,2) //会删除value数组中的前两项
b)插入 向指定位置插入任意数量的项,指定三个参数,第二个为0.
value.splice(1,0,"red") //会在value数组的第二项后面插入字符串"red".
c)替换 向指定位置插入任意数量的项,同时删除任意数量的项。
value.splice(1,1,"red") //会将value数组里的第二项替换成字符串"red"
八.位置方法
i.indexOf()方法 //接收两个参数:要查找的项和查找起点位置索引。
var num=[1,2,3];
alert(num.indexOf(2)); //1
ii.lastIndexOf()方法 //与indexOf()方法相似,只不过是从后面往前面找。
九.迭代方法
每个迭代方法接收两个参数:要在每一项上面运行的函数和该函数的作用域对象--影响this的值(可选的),传入这些方法中的函数会接收三个参数---***数组项的值,该项在数组中的位置,数组本身。
i.every()方法:对数组中的每一项运行给定函数,若函数对每一项都返回true,则返回true。
var num=[3,4,5,6,7];
var end_num=num.every(function(item,index,array){return(item>2)}); //true
ii.some()方法:对数组中的每一项运行给定函数,若函数对其中一项能返回true,则返回true。
iii.filter()方法:对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组。 // 可以用来查询某些符合条件的数组***
iv.map()方法:对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
v.forEach()方法:对数组中的每一项运行给定函数,没有返回值。 本质上与使用for循环迭代数组一样。
十.归并方法
reduce()方法 和 reduceRight()方法 //会迭代数组的所有项,然后构建一个最终返回的值
这两个方法都接收两个参数:一个在每一项上调用的函数和作为归并基础的初始值(可选的)。其中的函数接收4个参数:前一个值,当前值,项的索引,数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。
reduceRight()方法是从后开始遍历数组。
/*使用reduce()方法求数组中所有值的值之和*/
var values=[1,2,3,4,5];
var sum=value.reduce(function(pre,cur,index,array){return pre+cur});
alert(sum); //15
浙公网安备 33010602011771号