1 JavaScript中对数组的定义
数组标准定义:一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。
JavaScript中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数。这些数字在内部被转换为字符串类型,这是因为JavaScript对象中的属性名必须是字符串。数组在JavaScript中只是一种特殊的对象,所以效率上不如其他语言中的数组高。
2 使用数组
2.1 创建数组
var list = []
var list = [1, 2, 3, 4]
var list = new Array()
var list = new Array(1, 2, 3, 4)
var list = new Array(10)
推荐使用[]操作符,效率最高。
2.2 读写数组
使用[]操作符
var num = []
num[1] = 1
var n = num[1] // n 为1
2.3 由字符串生成数组
调用字符串对象的split()方法可生成数组。
2.4 对数组的整体性操作
1.浅复制:将一个数组赋给另外一个数组,弊端是当原引用修改了数组的值,另外一个引用也会感知到这个变化。
2.深复制:将原数组的每一个元素都复制一份到新数组中。
function copy(arr1, arr2) {
for (var i = 0; i < arr2.length; i++) {
arr1[i] = arr2[i]
}
}
3 存取函数
JavaScript提供了一组用来访问数组元素的函数,叫做存取函数,这些函数返回目标数组的某种变体。
3.1 查找元素
indexOf()
3.2 数组的字符串表示
join()
toString()
3.3 由已有数组创建新数组
concat()
splice()
splice()方法从现有数组截取一个新数组。该方法的第一个参数是截取的起始索引,第二个参数是截取的长度。
4 可变函数
JavaScript拥有一组可变函数,使用它们,可以不必引用数组中的某个元素,就能改变数组内容。
4.1 为数组添加元素
push() 将元素添加到数组末尾
unshift() 将元素添加到数组开头
length属性
nums[nums.length] = 7
4.2 从数组中删除元素
pop() 删除数组末尾元素
shift() 删除数组第一个元素
pop()和shift()方法都将删掉的元素作为方法的返回值返回
4.3 从数组中间位置添加和删除元素
splice()
添加元素,需提供以下参数:
1.起始索引
2.需要删除的个数
3.想要添加进数组的元素
var nums = [1, 2, 3, 7, 8,9]
var newElements = [4,5,6]
nums.splice(3, 0, newElements) // [1, 2, 3, 4,5,6,7, 8,9]
var nums = [1, 2, 3, 7, 8,9]
nums.splice(3, 0,4,5,6) // [1, 2, 3, 4,5,6,7, 8,9]
4.4 为数组排序
reverse() 顺序翻转
sort() 如果元素为字符串类型,可使用本方法排序,否则需传入一个大小比较函数。
5 迭代器方法
迭代器方法是对数组中的每个元素应用一个函数,可以返回一个值、一组值或者一个新数组。
5.1 不生成新数组的迭代器方法
forEach() 接受函数为参数
every() 接受一个返回值为e布尔类型的函数,如果对于所有元素,该函数返回为true,则该方法返回true
some() 接受一个返回值为布尔类型的函数,如果其中只要有一个元素,该函数返回为true,则该方法返回true
reduce() 接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和数组中的后续元素调用改函数,直到数组中的最后一个元素,最后返回得到的累加值。可用于求和或者连成字符串等等。
reduceRight() reduce()是从左到右执行,reduceRight()是从右到左执行。
5.2 生成新数组的迭代方法
map()
filter()
map()与forEach()类似,返回一个新的数组
filter()与every()类似,返回一个新数组,只包含返回true的元素。
6 二维和多维数组
JavaScript只支持一维数组,但是通过在数组里保存数组元素的方式,可以轻松创建多维数组。
7 对象数组
包含对象的数组,数组的方法和熟悉对对象依然适用。