JavaScript基础-集合-Array

来源:互联网 发布:网络数字电视怎么打开 编辑:程序博客网 时间:2024/04/29 15:57

概要

在JavaScript中,数组以 Array 为构造函数,是一个高阶的类似有序列表的数据类型。

语法

[element0, element1, ..., elementN]new Array(element0, element1[, ...[, elementN]])new Array(arrayLength)var arr = [];

属性

constructor
指定创建对象原型的函数。注意该属性值是一个指向函数自身的引用,而不是一个包含函数名称的字符串。
index
如果数组是通过正则表达式匹配创建的,匹配是字符串的下标索引为0.
input
如果数组是通过正则表达式匹配创建的,返回原始的字符串。
length
属性表示一个无符号 32-bit 整数,返回一个数组中的元素个数。
prototype
Array.prototype 本身也是个数组。

方法

Mutator 方法

这些方法可以改变数组自身:

pop
移除数组的最后一个元素,返回值是被删除的元素。
push(element1, ..., elementN) 返回数组长度
在数组的末尾添加一个或者多个元素,返回值是新的数组的长度。
reverse
颠倒数组中元素的顺序,原先第一个元素现在变成最后一个,同样原先的最后一个元素变成了现在的第一个,也就是数组的索引发生了变化。
shift
删除数组的第一个元素,返回值是删除的元素。
sort([compareFunction])
对数组中的元素进行排序。
splice

添加或删除数组中的一个或多个元素。

array.splice(index , howMany[, element1[, ...[, elementN]]])array.splice(index) // SpiderMonkey/Firefox extension

参数

index
从数组的哪一位开始修改内容。如果超出了数组的长度,则自动从数组末尾开始添加内容;如果是负值,则表示从数组末位开始的第几位。
howMany
整数,表示要移除的数组元素的个数。如果 howmany 是 0,则不移除元素。这种情况下,至少应添加一个新元素。如果howmany 超出了 index 位之后的元素的总数,则从 index 向后至数组末尾的全部元素都将被删除(含第index 位)。如果没有指定 howmany 参数(如上第二种语法,是 SpiderMonkey 的扩展功能),将会删除第index 位之后的所有元素(不含第 index 位)。
element1, ..., elementN
要添加进数组的元素。如果不指定,则 splice 只删除数组元素。

返回值

由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。


unshift
添加一个或者多个元素在数组的开头,返回值是新的数组的长度。

Accessor 方法

这些过程不改变数组自身These methods do not modify the array and return some representation of the array.

concat(value1,value2, ..., valueN)

返回一个包含此数组和其他数组和/或值的结合的新数组

参数

valueN
需要与原数组合并的数组或非数组值

indexOf

返回第一个与给定参数相等的数组元素的索引,没有找到则返回-1。

searchElement
位于数组中的元素。
fromIndex

默认值: 0 (即在整个数组中查找指定元素)


join([separator = ','])
将所有的数组元素连接成一个字符串。
lastIndexOf(searchElement[,fromIndex = 0])

方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从 fromIndex 处开始。


参数

searchElement
被查找的元素。
fromIndex
从此位置开始逆向查找。默认为数组的长度减 1,即整个数组都被查找。如果该值大于或等于数组的长度,则整个数组会被查找。如果为负值,将其视为从数组末尾向前的偏移。即使该值为负,数组仍然会被从后向前查找。如果该值为负时,其绝对值大于数组长度,则方法返回 -1,即数组不会被查找。

slice(begin[,end])

返回数组中的一段。方法把数组中一部分的浅复制(shallow copy)存入一个新的数组对象中,并返回这个新的数组


toSource
searchElement[, fromIndex = arr.length - 1]
Returns an array literal representing the specified array; you can use this value to create a new array. Overrides the Object.toSource method.
toString
返回代表该数组及其元素的字符,重写Object.toString 过程.
valueOf
Returns the primitive value of the array. Overrides the Object.valueOf method.

循环(迭代)过程

Several methods take as arguments functions to be called back while processing the array. When these methods are called, thelength of the array is sampled, and any element added beyond this length from within the callback is not visited. Other changes to the array (setting the value of or deleting an element) may affect the results of the operation if the method visits the changed element afterwards. The specific behaviour of these methods in such cases is not always well-defined, and should not be relied upon.

filter(callback[,thisArg])

对数组中的每一个元素调用参数中指定的过滤函数,并将对于过滤函数返回值为true的那些数组元素集合为新的数组返回。

参数

callback
用来测试数组每个元素的函数。
thisArg
执行 callback 时的 this 值。

forEach(callback[,thisArg])

对数组的每一个元素依次调用参数中指定的函数。

参数

callback
在数组每一项上执行的函数,接收三个参数:
currentValue
当前项(指遍历时正在被处理那个数组项)的值。
index
当前项的索引(或下标)。
array
数组本身。
thisArg
可选参数。用来当作callback 函数内this的值的对象。

every(callback[,thisArg])

如果数组中每一个元素都满足参数中提供的测试函数,则返回真。

callback
用来测试每个元素的函数。
thisArg
执行 callback 时使用的 this 值。

map(callback[,thisArg])

创建一个新数组,新数组中含有,分别对于原来数组的每一个元素调用一个给定函数的结果

callback
原数组中的元素经过该方法后返回一个新的元素。
currentValue
callback 的第一个参数,数组中当前被传递的元素。
index
callback 的第二个参数,数组中当前被传递的元素的索引。
array
callback 的第三个参数,调用 map 方法的数组。
thisArg
执行 callback 函数时 this 指向的对象。

some(callback[,thisArg])

如果数组中至少有一个元素满足参数函数的测试,则返回true。

参数

callback
用来测试每个元素的函数。
thisArg
执行 callback 时使用的 this 值。

Generic 方法

在Javascript数组对象上得许多方法也被设计用于那些看起来像数组的对象上。就是说,他们能被使用在任何一个有一个length属性并且能够通过数值属性名来访问的对象上(就像使用数组array[5]的下标)。

TODO: 给出使用 Array.prototype.forEach.call 的例子,并且添加这个方法给一个类似 JavaArray 或 String 的对象上。

一些方法,比如 join,仅仅读取他们被调用的对象的长度和数值属性。 另外,像 reverse 一样,要求对象的数值属性和长度属性是可变的;因此,这些方法不能在像 String 这样的对象上被调用,String不允许它的长度属性和synthesized的数值属性被设置。

那些在任何类Array对象上起作用并且不必修改长度和数值属性的方法是:

  • concat
  • every
  • filter
  • forEach
  • indexOf
  • join
  • lastIndexOf
  • map
  • slice
  • some
  • toSource
  • toString
  • valueOf

那些修改被调用的对象的长度或者数字属性的方法是:

  • pop
  • push
  • reverse
  • shift
  • sort
  • splice
  • unshift

这个例子展示了如何在一个 string 对象上使用 map 获得一个展现字符值的以ASCII编码的字节数组 :

var a = Array.prototype.map.call("Hello World",                                  function(x) { return x.charCodeAt(0); })// a now equals [72,101,108,108,111,32,87,111,114,108,100]

例子

例子:创建数组

这个例子,创建了一个空数组,长度为0,接着对msgArray[0]赋值,让后对msgArray[99]赋值,数组长度变成了100。

var msgArray = new Array();msgArray[0] = "你好";msgArray[99] = "宝贝";// 因为数组元素msgArray[99]已经定义,// 所以下面的条件成立。if (msgArray.length == 100)   myVar = "数组的长度是100。";

例子:二维数组

这个例子创建了一个二维数组myVar,然后赋值。

var myVar = "二维数组实例;\n";a = new Array(4);for (var i = 0; i < 4; i++) {   a[i] = new Array(4);   for (var j = 0; j < 4; j++) {      a[i][j] = "[" + i + "," + j + "]";   }}for (var i = 0; i < 4; i++) {   str = "Row " + i + ":";   for (var j = 0; j < 4; j++) {      str += a[i][j];   }   myVar += str + ";\n";}

下面是myVar的值:

二维数组实例;Row 0: [0,0][0,1][0,2][0,3];Row 1: [1,0][1,1][1,2][1,3];Row 2: [2,0][2,1][2,2][2,3];Row 3: [3,0][3,1][3,2][3,3];

0 0