1.1 数组
- 数组是值的有序集合,每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。
- 数组是特殊的对象,所有的索引都是属性名,所有元素都是属性值。
1.2 创建数组
- 数组字面量
var myCars=["Saab","Volvo","BMW"];
- 数组构造函数
var a = new Array();
1.3 访问数组
- 通过 [ ] 操作符来访问某个特定的元素。
- 数组是特殊的对象,使用方括号来访问数组元素和使用方括号来访问对象的属性一样。
var name = myCars[0];
- 虽然数组元素可以看作是数组对象的属性,但下面这种写法是错误的,因为在JS中,以数字开头的属性不能用点号访问,必须用方括号。
console.log(arr.0); // a syntax error
renderer.3d.setTexture(model, 'character.png'); // 语法错误
renderer['3d'].setTexture(model, 'character.png'); // √
- 注意在3d那个例子中,引号是必须的。你也可以将数组的索引用引号引起来,比如 years[ 2 ] 可以写成 years [ ‘2’ ]。
- years[ 2 ] 中的2会被JS解释器通过调用 toString 隐式转换成字符串。
1.4 数组长度
- 每个数组都有一个 length 属性,就是这个属性使其区别于常规的 JavaScript 对象。
- length 属性代表数组中元素的个数。
1.5 数组遍历
- 改进的 for 。数组的长度只查询一次而非每次循环都要查询
for(var i = 0,len = keys.length;i < len;i++){
//循环体
}
- for - in
for(var i in keys){
//循环体
}
- forEach
var fruits = ['Apple','Banana'];
fruits.forEach(function(item,index,array){
console.log(item,index);
})
数组方法
- 创建数组
- from( ) 将类数组结构转换为数组实例
- of( )将一组参数转换为数组实例
- 迭代器方法
- keys( ) 返回数组索引的迭代器
- values( ) 返回数组元素的迭代器
- entries( ) 返回索引/值对的迭代器
- 复制和填充方法
- fill( ) 复制数组的部分或者全部元素
- copyWithin( ) 复制数组部分元素用来替换部分元素
- 栈方法 (模仿数据结构–栈 后进先出的操作限制)
- push( )插入元素到数组尾部,返回数组最新长度
- pop( ) 弹出数组尾部元素,返回数组最新长度
- 队列方法(模仿数据结构–队列 先进先出的操作限制)
- shift( ) 删除数组头部元素
- unshift( ) 执行shift( ) 相反操作,即添加元素到数组头部
- 排序方法
- reverse( ) 将数组反向排序
- sort( ) 可接收一个比较函数用来确定正序还是逆序排序
- 操作方法
- concat( ) 可在现有数组的基础上添加额外的参数构建新数组
- slice( ) 可创建包含现有数组部分元素的新数组
- splice( ) 可用来删除现有数组的部分元素,当删除参数设为0时可变为插入操作,当删除参数设为1时可变为替换操作
-
搜索方法
- indexOf( ) 返回要查找元素的索引
- lastIndexOf( ) 逆序查找元素的索引
- find( ) 确定要查找的元素是否在数组里
- findIndex( ) 返回第一个匹配元素的索引
-
迭代方法
- every( )
- filter( )
- forEach( )
- map( )
- some( )
常见操作
- push( ) 添加元素到数组的末尾
fruits.push('Mango');
// ["Strawberry", "Banana", "Mango"]
- pop( ) 删除数组末尾的元素
var last = fruits.pop(); // remove Orange (from the end)
// last: "Orange"; fruits: ["Apple", "Banana"];
- shift( ) 删除数组头部元素
var first = fruits.shift(); // remove Apple from the front
// first: "Apple"; fruits: ["Banana"];
- unshift( ) 添加元素到数组的头部
var newLength = fruits.unshift('Strawberry') // add to the front
// ["Strawberry", "Banana"];
- indexOf( ) 找出某个元素在数组中的索引
fruits.push('Mango');
// ["Strawberry", "Banana", "Mango"]
var pos = fruits.indexOf('Banana');
// 1
-
splice( ) 指定位置删除一个或多个元素
- splice( ) 接收多个参数
- 第一个参数指定了插入和(或)删除的起始位置
- 第二个参数指定了应该删除的元素的个数
- 如果忽略第二个参数则默认删除后面所有元素
- 第三个参数开始指定了需要插入到数组的元素
var vegetables = ['Cabbage', 'Turnip', 'Radish', 'Carrot'];
var removedItems = vegetables.splice(1, 2);
console.log(vegetables);// ["Cabbage", "Carrot"]
- slice( ) 复制一个数组
var shallowCopy = fruits.slice(); // this is how to make a copy
// ["Strawberry", "Mango"]