JavaScript数组

页面导航:首页 > 网络编程 > JavaScript > JavaScript数组

JavaScript数组

来源: 作者: 时间:2016-02-01 09:32 【

JavaScript 数组是值的有序集合,所谓有序即数组的下标或索引从零开始递增,但也可能是稀疏的,数组长度可通过 length 属性获得。数组中元素的类型是任意的,创建数组时无需声明数组

JavaScript 数组是值的有序集合,所谓有序即数组的下标或索引从零开始递增,但也可能是稀疏的,数组长度可通过 length 属性获得。数组中元素的类型是任意的,创建数组时无需声明数组长度,它是动态的,会根据需要自动增长或缩减。数组继承自Array.prototype,它定义了一套丰富的数组操作方法,这个在后面会介绍到。

1、创建数组

使用数组直接量:

var empty = [];
var primes = [2, 3, 5, 7, 11];
var misc = [1.1, true, “a”, ];
var base = 1024;
var table = [base, base + 1, base + 2, base + 3];
var b = [[1, {x: 1, y: 2}], [2, {x: 3, y: 4}]];
var count = [1, , 3];
var undefs = [ , , ];

使用构造函数Array():

var a = new Array();
var a = new Array(10);
var a = new Array(5, 4, 3, 2, 1, “testing, testing”);

2、读写数组元素

读写数组元素使用[]操作符,索引值是个非负整数,但也可以使用负数或非整数来索引数组,这种情况下,数值转换为字符串,字符串作为属性名来用,其实数组就是个特殊的对象。

var a = [“world”];
var value = a[0];
a[1] = 3.14;
a[-1.23] = true;
a[“1000”] = 0;
a[1.000]

3、稀疏数组

稀疏数组就是包含从0开始的不连续索引的数组,通常,数组的 length 属性值代表数组中元素的个数,如果数组是稀疏的,length 属性值大于元素的个数。足够稀疏的数组通常在实现上比稠密的数组更慢、内存利用率更高,在这样的数组中查找元素的时间与常规对象属性的查找时间一样长。实际上,绝大多数 JavaScript 数组不是稀疏数组,如果确实碰到了稀疏数组,只不过它们包含一些 undefined 值。

4、数组长度

数组长度的属性是 length,如果为一个数组元素赋值,它的索引大于或等于现有数组的长度时,length 属性的值将设置为索引值加 1。另一方面,设置 length 属性为一个小于当前长度的非负整数时,当前数组中那些索引值大于或等于这个设置值的元素将从中删除,如果设置值大于当前数组长度,数组尾部创建一个空的区域。

5、添加和删除数组元素

添加数组元素直接给新索引赋值即可,删除时可用 delete 操作符,类似于赋 undefined 值,但略有不同。delete 不会修改数组 length 属性,也不会修改其它属性的索引,而是留下一个空白。数组元素的添加和删除还有一些方法可以使用,这个在后面会提到。

6、数组遍历

数组遍历常用 for 循环、for/in 循环,或者 forEach(),forEach 使得数组拥有简单而强大的函数式风格,如下例子。

var data = [1, 2, 3, 4, 5];
var sumOfSquares = 0;
data.forEach(function(x) {
    sumOfSquares += x*x;
});

7、多维数组

多维数组即数组的数组,数组元素是另一个数组。

8、数组方法

join():将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串,可以指定一个可选的字符串在生成的字符串中来分隔数组的各个元素,如果不指定分隔符,默认使用逗号。

reverse():将数组中的元素颠倒顺序,返回逆序的数组,原数组替换为逆序数组。

sort():将数组中的元素排序后并返回排序后的数组,当不带参数调用时,数组元素以字母表顺序排序,如果数组包含 undefined 元素,它们会被排到数组的尾部,下面是一个简单的例子,给方法传递了一个比较函数。

var a = [33, 4, 1111, 222]
a.sort(function(a, b) {
    return a - b;
});

concat():创建并返回一个数组,它的元素包括调用这个方法的原始数组的元素和这个方法的每个参数,如果这些参数中的任何一个自身是数组,则连接的是数组的元素,而非数组本身,但不会递归扁平化数组的数组。

slice():返回指定数组的一个片段或子数组,不会修改调用的数组。它的两个参数分别指定了片段的开始和结束的位置,返回的数组包含第一个参数指定的位置和所有到但不含第二个参数指定的位置之间的所有数组元素。如果只指定一个参数,返回的数组将包含从开始位置到数组结尾的所有元素,参数可以是负数,表示相对于数组中最后一个元素的位置。

push():数组尾部添加一个或多个元素,返回新数组的长度。
pop():数组尾部的一个元素弹出,返回这个弹出的元素。

unshift():数组头部添加一个或多个元素,返回新数组的长度。
shift():数组头部的一个元素弹出,返回这个弹出的元素。

toString():将数组每个元素转换为字符串并且输出用逗号分隔的字符串列表。
toLocaleString():是 toString()的本地化版本。

9、ES5中的数组方法

ES5 定义了一些功能强大的方法,大多数方法的第一个参数接收一个函数,并且对数组的每个元素调用一次该函数,如果是稀疏数组,对不存在的元素不调用传递的函数。在大多数情况下,调用提供的函数使用三个参数,它们是数组元素、元素的索引和数组本身。通常,只需要第一个参数值,可以忽略后两个参数。大多数 ES5 数组方法的第一个参数是一个函数,第二个参数是可选的。如果有第二个参数,则调用的函数被看做是第二个参数的方法。也就是说,在调用函数时传递进去的第二个参数作为它的 this 关键字的值来使用。ES5 中的数组方法都不会修改它们调用的原始数组,但是,传递个这些方法的的函数时可以修改这些数组的。

forEach():从头至尾遍历数组。

map():将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值。如果是稀疏数组,返回的是相同长度的稀疏数组。

filter():过滤数组,返回的数组元素是调用的数组的一个子集,会跳过稀疏数组中缺少的元素。

some():数组逻辑判定,对数组元素应用指定的函数进行判定,只要有一个元素符合判定条件就返回 true,有短路特性。

every():数组逻辑判定,对数组元素应用指定的函数进行判定,只要有一个元素不符合判定条件就返回false,有短路特性。

reduce():使用指定的函数将数组元素进行组合,生成单个值,数组元素从左往右开始计算。

reduceRight():使用指定的函数将数组元素进行组合,生成单个值,数组元素从右往左开始计算。

indexOf():从头至尾搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,没有找到返回 -1。

lastIndexOf():与 indexOf()搜索方向相反。

10、数组类型

判断一个对象是否是数组可以使用 Array.isArray() 方法。

11、类数组对象

有时候,一个对象的表现就像一个数组一样,这时候这个类数组对象就可以使用一些数组方法。

var a = {“0”: “a”, “1”: “b”, “2”: “c”, length: 3}; // 类数组对象
Array.prototype.map.call(a, function(x) {
    Return x.toUppercase();
}); // [“A”, “B”, “C”];

12、作为数组的字符串

如下字符串的行为类似于只读数组。

var s = “javascript”;
s.charAt(0); // “j”
s[1]; // “a”

 

Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<