JavaScript Array类型
Array类型是ECMAScript最常用的类型,与其他语言不同的是,ECMAScript数组的每一项可以保存任何类型的数据,同时ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。
1.创建数组的基本方式:
(1)使用Array构造函数
var colors = new Array();
//创建colors的数组
var colors = new Array(20);
//创建数组保存量为20的colors数组
var colors = new Array("red","green","blue");
//创建包含以上内容的数组
//在使用构造函数时也可以省略new关键字,如下
var colors = Array("red","green","blue");
(2)使用数组字面量表示法
var colors = ["red","blue","green"];
//创建一个包含三个字符串的数组
var names = [];
//创建一个空数组
var values = [1,2,];
//bad,再IE8及其以前的版本会创建一个包含1,2,undefined的数组。在其他的浏览器中,会创建包含两个项目值为1,2的数组。
2.数组属性
constructor:返回创建数组对象的原型函数。
length:设置或返回数组元素的个数。
prototype:允许你向数组对象添加属性或方法。
数组的length属性不是只读的,可以通过修改这个属性来实现数组的末尾移除项和向数组中添加新项。
var colors = ["yellow","green","red"];
colors.length = 2;
alter(colors[2]); //undefined当colors数组的length属性设置为2后,会把该数组的最后一项移除。
var names = ["jack","tom","jarry"];
names[names.length] = "sun"; //在位置3添加一个数据项
names[names.length] = "harry"; //在位置4添加一个数据项
3.栈方法
push()方法可以接收任意数量的参数,把他们逐个添加到数组末尾。
pop()方法可以从数组末尾移除最后一项,减少数组的length值,然后再返回移除的项。
var colors = ["yellow"];
var count = colors.push("red","green");
//count的值为3,为接收后的数组长度
var item = colors.pop();
//item的值为“green”,为移除来的数组最后一项。
4.队列方法
shift()移除数组中的第一项并返回该项,同时数组的长度减1。
unshift()再数组前端添加任意个项并返回数组的长度。
5.重排序方法
reverse()反转数组项的顺序。
var ages = [1,2,3,4];
ages.reverse();
alter(ages)
//4,3,2,1
在默认情况下,sort()方法按照升序排列数组项---即最小的值位于最前面,最大的值位于最后面。为了实现排序,sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串,进而确定如何排序。即使数组项都是数字比较的也是字符串。这种排序方式在很多时候不适合,因此我们可以接收一个比较函数来指定哪个值在前哪个值在后。
function compare1(v1,v2)[
return v1-v2;
//从小到大排序
}
function compare2(v1,v2){
return v2-v1;
//从大到小排序
}
[1.3.6.4.5,10].sort(compare1);
//排序结果是1,3,4,5,6,10
[1,3,6,4,5,10].sort(compare2);
//排序结果是10,6,5,4,3,1
6.操作方法
concat()方法可以基于当前数组的所有项创建一个新数组。在没有给concat()方法传递参数的情况下,他只是复制当前数组并返回副本。如果传递给cancat()方法的是一个或者多个数组,则该方法会将这些数组的每一项添加到新数组中。如果传递的不是数组,这些值就会被简单的添加到新数组的末尾。
var colors = ['red','blue','orange'];
var colors2 = colors.concat('black','green');
alert(colors);
//red,blue,orange
alert(colors2);
//red,blue,orange,black,green
slice()方法可以基于当前数组的一或者多个项创建一个新数组。slice()可以接受一或两个参数,即要返回项的起始和结束位置。当只有一个参数的时候,返回从该参数指定位置到当前数组末尾的所有项。如果有两个参数,返回其实和结束之间的项(不包括结束位置的项)。
var colors = ['red','blue','orange'];
var colors2 = colors.slice(1,2);
alert(colors);
//red,blue,orange
alert(colors2);
//blue
splice()方法主要用法是向数组的中部插入项,使用方式有以下三种:
- 删除:可以删除任意数量的项,只需指定两个参数:要删除的第一项位置和要删除的项数量。如splice(1,2)会删除第1个数开始的计算的两个数。
- 插入:可以向指定位置插入任意数量的项,只需提供三个参数:起始位置,0(要删除的项),要插入的项数。如splice(2,0,"red","blue").在第2个项开始插入"red","blue"两个项。
- 替换:可以向指定位置插入任意数量的项并同时删除任意数量的项,只需提供三个参数:起始位置,要删除的项数,要插入的项数
splice()方法始终会返回一个数组,该数组包含从原始数组中删除的项(若没有则返回一个空数组)。
join():根据指定分隔符将数组中的所有元素放入一个字符串,并返回这个字符串。参数为传入的分隔符,默认为','
var arr = [1,2,3,4,5,6]; console.log(arr.join()); //1,2,3,4,5,6 console.log(arr.join("*")); //1*2*3*4*5*6 console.log(arr); //[1,2,3]---原数组未改变 </script>
7位置方法
indexOf()方法接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。该方法从数组的开头往后查找。
lastindex)f()方法接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。该方法从数组的末尾往前查找。
这两个方法都返回要查找的项所在数组中的位置,在没有找到的情况下返回-1.由于查找的时候使用的是“===”运算符,所以要求查找的项必须严格相等。
8.迭代方法
ES5为数组定义了五个迭代方法,每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象---影响this的值。传入这些方法中的函数会接收三个参数:数组项的值,该项在数组中的位置和数组对象本身。
- every():对数组中的每一项运行给定的函数,如果该函数对每一项都返回true,则返回true。
- filter():对数组的每一项运行给定的函数,返回该函数会返回true的项组成的函数。
- forEach():对数组中的每一项运行给定的函数。这个方法没有返回值。
- map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的函数。
- some():对数组中的每一项运行给定的函数,如果该函数任意一项返回true,则返回true。
var mynumbers = [1,2,3,4,5,6,3];
function a(item,index,array){
return (item>2);
}
//item参数项的值,index该项在数组中的位置,array数组对象本身。
function b(item,index,array){
return item+index;
}
console.log(mynumbers.every(a));
//false,判断是否全部大于2
console.log(mynumbers.some(a));
//判断是否有值大于2的数组项
console.log(mynumbers.filter(a));
//把值大于2的数组项组成新的数组
console.log(mynumbers.map(b));
//对每一个数组项执行函数后的结果组成新的数组。
9.归并方法
两个方法都会迭代数组的所有项,然后构建一个最终返回的值。两个方法都接收两个参数:一个在每一项上调用的函数和(可选项)作为归并基础的初始值。其中函数接收四个参数:前一个值,当前值,项的索引和数组对象本身。这个函数返回的任何值都会作为第一个参数自动传给下一项。
reduce()方法从第一项开始,逐个遍历到最后。
reduceRight()则成数组的最后一项开始,向前遍历到第一项。
var mynumbers = [1,2,3,4,5,6,3];
function thesum(pre,item,index,array){
return pre+item;
}
console.log(mynumbers.reduce(thesum));
10.其他
检测数组:ECMAScript5新增了Array.isArray()方法,这个方法用以确定某个值到底是不是数组。
转换方法:toString(),tolocaleString()和valueOf()
var array = new Array("asd", "qwe", "zxc");
console.log(array.valueOf());
console.log(array.toString());
console.log(array.toLocaleString());

valueOf:返回数组本身
toString():把数组转换为字符串,并返回结果,每一项以逗号分割。
toLocalString():把数组转换为本地数组,并返回结果。
toString()和tolocaleString()的区别:
- toLocalString()是调用每个数组元素的 toLocaleString() 方法,然后使用地区特定的分隔符把生成的字符串连接起来,形成一个字符串。
- toString()方法获取的是String(传统字符串),而toLocaleString()方法获取的是LocaleString(本地环境字符串)。
- 如果你开发的脚本在世界范围都有人使用,那么将对象转换成字符串时请使用toString()方法来完成。
- LocaleString()会根据你机器的本地环境来返回字符串,它和toString()返回的值在不同的本地环境下使用的符号会有微妙的变化。
- 所以使用toString()是保险的,返回唯一值的方法,它不会因为本地环境的改变而发生变化。如果是为了返回时间类型的数据,推荐使用LocaleString()。若是在后台处理字符串,请务必使用toString()。

浙公网安备 33010602011771号