JavaScript权威指南(个人笔记):(三)数组
数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。
数组是对象的特殊形式,数组索引实际上和碰巧是整数的属性名差不多(类似将指定的数字索引值转化成字符串——然后将其作为属性名来使用)(使用方括号访问数组元素就像方括号访问对象的属性一样)
数组的实现是经过优化的,用数字索引来访问数组元素一般来说要比访问常规的对象属性要快很多。
所有的索引都是属性名,但只有“整数”属性名才是索引(可能是对象属性,也可能是索引)
delete 删除数组元素,但数组长度不会改变!
let arr1[10] = 1 // 长度为11
let arr2 = [ ] // 长度为0 0 in arr2 => false(索引0不存在)
let arr3 = [ , ] // 长度为1 0 in arr3 => false(索引0不存在)
创建数组
一种是直接创建数组。
let empty = []; // 没有元素的数组
还有一种是用构造函数Array(),如下:
没有参数,相当于创建空数组,等同于数组直接量[]
let arr1 = new Array() // => []
一个参数,指定数组长度
let arr2 = new Array(2) // => 数组长度为2
两个及以上参数,类似和直接创建数组一样
let arr3 = new Array(3, 7, 1) // => [3, 7, 1]
多维数组
JavaScript不支持正真的多维数组,但可以用数组的数组来近似。访问数组的数组中的元素,只要简单的使用两次[]操作符即可。
例子:
let arr = [
[1,2,4]
]
arr[0][2] // => 4
类数组对象
看起来很像数组的对象
例子:
let obj = {
0:'a',
1:'b',
length: 2
} ;
obj[0] // => 'a'
obj.length // => 2
数组和对象的区别
1.数组有length属性
2.length减少数组的长度,相当于删除数组元素
3.数组继承自Array.prototype的属性
4.类属性为 “Array”
数组的方法
Array.isArray(arr) 判断是否是数组(还可以用obj instanceof Array)
arr.indexOf(val) 返回元素在数组中首次出现的位置(即索引)(有第二个参数start:开始查找的可选数组序号。如省略,则为0)(这个还能用于字符串)
arr.lastIndexOf(val) 和上面一样,只是从右到左
arr.join(separator) 将数组的元素转为字符串(separator如果省略,则为 ',' separator如果为 '' 则拼接成一整句)(与string.split() 相反)
arr.reverse() 颠倒元素的顺序。
arr.concat() 把元素合并到数组中,或合并数组。返回一个新数组(如果参数是数组,则连接的是数组的元素,而非数组本身。不会递归数组)(不会改变原数组!)
arr.slice(start , end) 取数组中的一段
arr.splice(start , deleteCount, val1, ...) 添加或删除元素,返回被删除的数组 (同时会改变原数组)(即返回的数组和原来的数组不一样!)
arr.toString() 数组转字符串 [1 , 2 , 3] => '1,2,3'
arr.push(val1, ...) 向末尾添加一个或多个元素,返回新的长度
arr.pop() 删除最后一个元素,减小长度,返回删除的元素
组合上面两个,可以实现先进后出的栈
arr.unshift() 向头部添加一个或多个元素,返回新的长度
arr.shift() 删除第一个元素,返回删除的元素
arr.forEach( function (item , index , arr) {} ) 遍历数组(遍历不会数组本身的元素,除非用第3个参数或者用Object.defineProperty( ))(forEach不能遍历关联数组)
arr.map( 函数 ) 包装每个元素,返回新数组。(原数组不变)
例子:
let arr1 = ['a','b','c'];
let arr2 = arr.map((item)=>{ return item+1 }) // arr2=>['a1','b1','c1'] (item就是数组里的每个元素,一定要return)
arr.filter( 函数 ) 返回过滤的元素的数组(里面函数是用来判定bool,如果返回值为true,就添加到返回值的数组中)
例子:
let arr1 = [{id:1, name:'joy'},{id:2, name:'andy'},{id:3, name:'kaizo'}];
let arr12= arr.filter((item)=>{ return item.id == 2 }) // arr2=>[ {id:2, name:'andy'} ] (符合几个就返回几个,这里只有第二个符合)
arr.every( 函数 ) 当且仅当数组中所有元素判断都返回true,它才返回ture
arr.some( 函数 ) 当数组中至少有一个元素判断返回true,它就返回ture
arr.reduce( 函数 ) 合并两个值(比如两个数组元素),返回一个“缩减”的新值 (里面函数第一个参数是到目前为止的化简操作累积的结果)
arr.reduceRight( 函数 ) 和上面一样,只是从右到左
arr.sort(函数) 排序,参数为比较函数 (a , b)假设第一个参数在前,返回小于0的值,反之,在后返回大于0的值
浙公网安备 33010602011771号