1. 概述
数组是一种特殊类型的对象。在 JavaScript 中对数组使用 typeof 运算符会返回 “object”。
- 数组元素可以通过下表访问(非键值对数组),也可以通过键访问(键值对数组)。
- JavaScript 变量可以是对象。数组是特殊类型的对象。可以在相同数组中存放不同类型的变量:对象、函数、数组等……
1.1 创建数组
1 2
| var array-name = [item1, item2, ...]; var cars = new Array("Saab", "Volvo", "BMW");
|
1.2 访问数组元素
1.3 添加数组元素
- 向数组添加新元素的最佳方法是使用 push() 方法。
- 也可以使用下标直接向数组添加新元素(若添加索引高出数组当前长度范围,则会在数组中未赋值的下标位置创建未定义的“洞”):
1 2
| var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits[fruits.length] = "Lemon";
|
1.4 数组和对象的区别
- 在 JavaScript 中,数组使用数字索引。
- 在 JavaScript 中,对象使用命名索引。
2. 属性
- length :属性返回数组的长度(数组元素的数目)。
3. 方法
- toString() :把数组转换为数组值(逗号分隔)的字符串。
【注】所有 JavaScript 对象都拥有 toString() 方法。
- join() :方法也可将所有数组元素结合为一个字符串。它的行为类似 toString(),但是您还可以规定分隔符。
- pop() :方法从数组中删除最后一个元素。pop() 方法返回“被弹出”的值。
- push() :方法(在数组结尾处)向数组添加一个新的元素。push() 方法返回新数组的长度。
- shift() :方法会删除首个数组元素,并把所有其他元素“位移”到更低的索引。shift() 方法返回被“位移出”的字符串。
- unshift() :方法(在开头)向数组添加新元素,并“反向位移”旧元素。unshift() 方法返回新数组的长度。
- splice() :方法可用于向数组添加新项。splice() 方法返回一个包含已删除项的数组。
1 2
| var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.splice(2, 0, "Lemon", "Kiwi");
|
其中,第一个参数(2)定义了应添加新元素的位置(拼接);第二个参数(0)定义应删除多少元素;其余参数(“Lemon”,“Kiwi”)定义要添加的新元素。
【注】其余参数可省略。
- concat() :方法通过合并(连接)现有数组来创建一个新数组。concat() 方法不会更改现有数组。它总是返回一个新数组。concat() 方法可以使用任意数量的数组参数。
- slice() :方法用数组的某个片段切出新数组。slice() 方法创建新数组。它不会从源数组中删除任何元素。
slice() 可接受两个参数,比如 (1, 3)。该方法会从开始参数选取元素,直到结束参数(不包括)为止。如果结束参数被省略,比如第一个例子,则 slice() 会切出数组的剩余部分。
- sort() :方法以字母顺序对数组进行排序。sort() 可以接受自定义的比较函数来定义自己的排序顺序。
1 2
| var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return b - a});
|
- reverse() :方法反转数组中的元素。
- Math.max.apply() :来查找数组中的最大值。
- Math.min.apply() :来查找数组中的最低值。
1 2 3 4 5 6
| function myArrayMax(arr) { return Math.max.apply(null, arr); } function myArrayMin(arr) { return Math.min.apply(null, arr); }
|
【注】以下方法老版本浏览器(比如 Internet Explorer 8 或更早的版本)不支持。
- forEach() :方法为每个数组元素调用一次函数(回调函数)。
1 2 3 4 5 6
| var txt = ""; var numbers = [45, 4, 9, 16, 25]; numbers.forEach(myFunction); function myFunction(value, index, array) { txt = txt + value + "<br>"; }
|
该函数接受 3 个参数:
- 项目值
- 项目索引
- 数组本身
- map() :方法通过对每个数组元素执行函数来创建新数组。
- map() 方法不会对没有值的数组元素执行函数。
- map() 方法不会更改原始数组。
1 2 3 4 5
| var numbers1 = [45, 4, 9, 16, 25]; var numbers2 = numbers1.map(myFunction); function myFunction(value, index, array) { return value * 2; }
|
该函数接受 3 个参数(当回调函数仅使用 value 参数时,可以省略索引和数组参数):
- 项目值
- 项目索引
- 数组本身
- filter() :方法创建一个包含通过测试的数组元素的新数组。
1 2 3 4 5
| var numbers = [45, 4, 9, 16, 25]; var over18 = numbers.filter(myFunction); function myFunction(value, index, array) { return value > 18; }
|
该函数接受 3 个参数(当回调函数仅使用 value 参数时,可以省略索引和数组参数):
- 项目值
- 项目索引
- 数组本身
- reduce() :方法在每个数组元素上运行函数,以生成(减少它)单个值。
- reduce() 方法在数组中从左到右工作。另请参见 reduceRight()。
- reduce() 方法不会减少原始数组。
- reduce() 方法能够接受一个初始值。
1 2 3 4 5
| var numbers1 = [45, 4, 9, 16, 25]; var sum = numbers1.reduce(myFunction, 100); function myFunction(total, value) { return total + value; }
|
此函数接受 4 个参数:
- 总数(初始值/先前返回的值)
- 项目值
- 项目索引
- 数组本身
- reduceRight() :(同 reduce() 方法)方法在每个数组元素上运行函数,以生成(减少它)单个值。
- reduceRight() 方法在数组中从左到右工作。另请参见 reduce()。
- reduceRight() 方法不会减少原始数组。
- reduceRight() 方法能够接受一个初始值。
1 2 3 4 5
| var numbers1 = [45, 4, 9, 16, 25]; var sum = numbers1.reduceRight(myFunction); function myFunction(total, value, index, array) { return total + value; }
|
此函数接受 4 个参数:
- 总数(初始值/先前返回的值)
- 项目值
- 项目索引
- 数组本身
- every() :方法检查所有数组值是否通过测试。
1 2 3 4 5
| var numbers = [45, 4, 9, 16, 25]; var allOver18 = numbers.every(myFunction); function myFunction(value) { return value > 18; }
|
此函数接受 3 个参数:
- 项目值
- 项目索引
- 数组本身
- some() :方法检查某些数组值是否通过了测试。
1 2 3 4 5
| var numbers = [45, 4, 9, 16, 25]; var someOver18 = numbers.some(myFunction); function myFunction(value, index, array) { return value > 18; }
|
此函数接受 3 个参数:
- 项目值
- 项目索引
- 数组本身
- indexOf() :方法在数组中搜索元素值并返回其位置。
语法格式:
1
| array.indexOf(item, start)
|
item |
必需。要检索的项目。 |
start |
可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到结尾。 |
- lastIndexOf() :与 indexOf() 类似,但是从数组结尾开始搜索。
语法格式:
1
| array.lastIndexOf(item, start)
|
item |
必需。要检索的项目。 |
start |
可选。从哪里开始搜索。负值将从结尾开始的给定位置开始,并搜索到开头。 |
- find() :方法返回通过测试函数的第一个数组元素的值。
1 2 3 4 5
| var numbers = [4, 9, 16, 25, 29]; var first = numbers.find(myFunction); function myFunction(value, index, array) { return value > 18; }
|
此函数接受 3 个参数:
- 项目值
- 项目索引
- 数组本身
- findIndex() :方法返回通过测试函数的第一个数组元素的索引。
1 2 3 4 5
| var numbers = [4, 9, 16, 25, 29]; var first = numbers.findIndex(myFunction); function myFunction(value, index, array) { return value > 18; }
|
此函数接受 3 个参数:
- 项目值
- 项目索引
- 数组本身
4. 其他
- delete 运算符可用于删除数组项。
【注】使用 delete 会在数组留下未定义的空洞。