Press "Enter" to skip to content

JavaScript中强大的Array类型

JavaScript中的Array类型极其强大,有(模拟的)栈/队列方法,重排序方法,操作方法,迭代方法,位置方法和归并方法。

Array的一些基本问题

创建数组的两种方式

  • 使用构造函数
  • 使用字面量

当使用构造函数构造数组时,可传入(数组长度/数组的项)。

//使用构造函数
var ins1 = new Array(2);//创建一个长度为2的数组
var ins2 = new Array(‘1’,2);//创建一个[‘1’,2]
//使用字面量
var ins3 = [‘1’,2];

如何检测数组类型

  • instanceof
  • Array.isArray()

instanceof的问题在于当一个页面中有多个框架时,各个框架中的Array构造函数并不相同,因此框架1中的数组实例也就不存在于框架2中Array构造函数的原型链中,这样就没法使用instanceof判断。
而Array.isArray()可以很好的判断(如果浏览器支持该方法)。

length属性的非只读性

每一个数组实例都具有一个length属性来记录数组的长度,它具有一个很大的特点,即可以进行修改,你可以通过修改它来增加或者删除元素。

var ins = [1,2,3];
ins.length = 2; //ins = [1,2];
ins[length] = 3; //ins = [1,2,3];

数组中模拟的栈/队列方法

在数组中使用如下方法可模拟栈。
pop() : 删除并返回尾部元素,
push(ele) : 在尾部加入新元素并返回修改后的长度。
在数组中使用如下方法可以模拟队列。
push(ele) : 在尾部加入新元素并返回修改后的长度,
shift() : 在数组头部删除元素并返回该元素。
在数组中使用如下方法可以模拟反向队列。
pop() : 删除并返回尾部元素,
unshift(ele) : 在数组头部加入新元素并返回修改后的长度。
注意:unshift 和 pop 的参数均可为多个。

数组中的重排序方法

reverse

reverse方法用于将当前的数组反转,此操作会改变原数组。

sort

当不对sort传参而直接调用时,此方法将数组每一项转换为字符串,按照由小到大的顺序进行排序。

var ins = [3,1,10];
ins.sort();//[1,10,3];
//还可以对sort传入一个函数作为参数,函数中有两个默认的参数。
function func(value1,value2){
if(value1 > value2){
return 1; //若将value2排在前面,返回正数。
}else if(value1 < value2){
return -1; //若将value1排在前面,返回负数。
}else{
return 0; //两元素大小相等。
}
var ins = [3,1,10];
ins.sort(func);//[1,3,10]

数组中的操作方法

concat

此方法从现有数组上创建副本,然后将传入的参数加入副本(若参数为数组,将数组每一项加入;否则直接加入),最后返回副本。这意味着不会改变原数组。

slice

slice对数组进行切割,返回切割所得的副本,同样不会影响原数组。
slice的第一个参数为起始位置,第二个(可选)参数为结束位置。

splice

splice(起始位置,删除的项数,插入的项*)
此方法会改变原数组,它的返回值是被删除项组成的数组。

var ins = [1,2,3,4];
ins.splice(1,1); //[1,3,4]
ins.splice(0,0,5,6)//[5,6,1,3,4]

位置方法

indexOf(ele,start?)

lastIndexOf(ele,start?)

迭代方法

迭代方法( 函数 (数组项值,索引,数组本身),作用域?)
包括:

  • every:当每一项都返回true时,返回true。
  • some:包含任意一项返回true的项时,返回true。
  • forEach:对每一项执行指定的操作,无返回值。
  • map:返回数组,它的项为对数组每一项执行函数后的返回值。
  • filter:返回数组,它的项为原数组中执行函数返回true的项。

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax