JavaScript数组
1.创建数组
创建数组的方式有两种,第一种是使用Array构造函数,另一种是使用数组字面量表示法。
var colors = new Array(3); // 创建一个包含三项的数组
var colors = Array(3); // 省略了 new 操作符
var colors = ["red", "blue", "green"]; // 创建了包含三个字符串的数组
2.数组的 length 属性
数组的length属性不是只读的,通过设置这个属性,可以从数组的末尾移除项或添加新项
var colors = ["red", "blue", "green"];
colors.length = 2;
console.log(colors[2]); // undefined
colors.length = 4;
console.log(colors[3]); // undefined
利用 length 属性可以方便的在数组末尾添加新项。每当在数组末尾添加一项后,其 length 属性都会自动更新以反映这一变化。
var colors = ["red", "blue", "green"];
colors[colors.length] = "black";
colors[99] = "brown";
console.log(colors.length); // 100
3.检测数组
- 一般可用
instanceof
- ES5 新增了
Array.isArray()
方法
4.转换方法
toString()
返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串valueOf()
返回的还是数组toLocaleString()
join()
接受一个字符串参数,用作分隔符的字符串,然后返回一个包含所有数组项的字符串。如果不传入任何值或者传入undefined,使用逗号作为分隔符。
5.栈方法
- Last-In-First-Out
push()
接受任意数量的参数,并将其逐个添加到数组的末尾。返回修改后数组的长度pop()
从数组末尾移除最后一项,减少数组length
的值,然后返回移除的项
6.队列方法
- First-In-First-Out
shift()
移除数组中的第一个项并返回该项,同时将数组长度减1,结合push()
方法使用unshift()
在数组前端添加任意个项并返回新数组的长度
colors = [];
colors.unshift("red", "yellow");
conosle.log(colors); // ["red", "yellow"]
7.重排序方法
reverse()
反转sort()
排序,默认调用toString()方法,比较字典序,也可接受比较函数作为参数
numbers = [1, 5, 9, 7, 3];
numbers.sort(function(value1, value2){
return value1 - value2;
}); // 要想使value1排在value2的前面,需要返回负数,反之亦然
8.操作方法
concat()
创建当前数组一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。在没有给concat()方法传递参数的情况下,它只是复制当前数组并返回副本。
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["black", "brown"]);
console.log(colors); // ["red", "green", "blue"]
console.log(colors2); // ["red", "green", "blue", "yellow", "black", "brown"]
slice()
基于当前数组的一个或多个项创建新数组,不影响原数组。- 可接受一个或两个参数。接受一个参数:返回从该索引值到数组末尾的所有项。接受两个参 数:左闭右开区间。
- 若参数中存在负数,则用数组长度加上该数来确定位置
- 若起始位置大于结束位置,返回空数组
splice()
删除、插入和替换- 删除 定义两个参数:要删除的第一项的位置和要删除的项数
- 插入 定义 2 + n 个参数:起始位置, 0(其实就是删除的项数),要插入的 n 项
- 替换 定义 2 + n 个参数:起始位置, m(删除的项数),要插入的 n 项,m和n不一定相等
splice()
方法返回一个数组:从原始数组中删除的项数或空数组
9.位置方法
indexOf()
lastIndexOf()
- 两个方法均可接受两个参数,要查找的项和表示查找起点的索引(可选)。
- 前者从开始向后查找,后者从末尾向前查找
- 查找时使用全等(===)查找
- 未找到时返回 -1
10.迭代方法
every()
对数组的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 truefilter()
对数组的每一项运行给定函数,返回该函数会返回 true的项组成的数组forEach()
对数组的每一项运行给定函数。无返回值。map()
对数组的每一项运行给定函数,返回每次函数调用的结果组成的数组。some()
对数组的每一项运行给定函数,如果函数对任何一项返回 true, 则返回 true- 以上方法并不会修改数组中包含的值
- 以上个方法接受两个参数:给定函数和运行该函数的作用于对象(可选)。
- 作为参数的给定函数有三个参数:item, index, array
11.归并方法
reduce()
reduceRight()
- 前一个方法从第一项开始迭代,后一个从最后一项开始迭代
- 两个方法都接收两个参数,调用的函数和作为归并基础的初始值(可选)
- 作为参数的函数接收四个参数:prev, cur, index, array
var values = [1, 2, 3, 4, 5]
var sum = values.reduce(function(prev, cur ,index, array){
return prev + cur;
)};
console.log(sum);