《现代 JavaScript 教程 》Array
JavaScript的 Array
对象是用于构造数组的全局对象,数组是类似于列表的高阶对象。(引用自MDN)
相较于其它数据类型,它具有以下几个特点:
1、提供了遍历和修改元素的操作。
2、数组长度和元素类型都不固定,并且数据在内存中并不要求连续。所以相较于C++等语言中的数组,它更类似于C++中的deque,如果你想使用连续的数组可以使用TypedArray
3、只能用整数作为数组元素的索引,而不能用字符串。
数组的常见操作:
1、创建数组
let fruits = ['Apple', 'Banana']
console.log(fruits.length)
//length属性是数组的长度,准确地说,它是数组最后一个数字索引值加一。它由数组方法自动调整。
//如果我们手动缩短 length
,那么数组就会被截断。
// 2 //let fruits = new Array(); new Array()创建了一个对象,新建的对象a.__proto__ == Array.prototype。 这是一个标准的由Class到实例的创建步骤。体现了JS在面向对象方面向主流语言的过度。 //let fruits = Array();和new Array完全相同
2、通过索引访问数组元素
let first = fruits[0] // Apple let last = fruits[fruits.length - 1] // Banana
3、遍历数组
fruits.forEach(function(item, index, array) { console.log(item, index) }) // Apple 0 // Banana 1
4、添加元素到数组的末尾
let newLength = fruits.push('Orange') // ["Apple", "Banana", "Orange"]
5、删除数组末尾的元素
let last = fruits.pop() // remove Orange (from the end) // ["Apple", "Banana"]
6、删除数组头部元素
let first = fruits.shift() // remove Apple from the front // ["Banana"]
7、添加元素到数组的头部
let newLength = fruits.unshift('Strawberry') // add to the front // ["Strawberry", "Banana"]
8、找出某个元素在数组中的索引
fruits.push('Mango') // ["Strawberry", "Banana", "Mango"] let pos = fruits.indexOf('Banana') // 1
9、通过索引删除某个元素
let removedItem = fruits.splice(pos, 1) // this is how to remove an item // ["Strawberry", "Mango"]
10、从一个索引位置删除多个元素
let vegetables = ['Cabbage', 'Turnip', 'Radish', 'Carrot'] console.log(vegetables) // ["Cabbage", "Turnip", "Radish", "Carrot"] let pos = 1 let n = 2 let removedItems = vegetables.splice(pos, n) // this is how to remove items, n defines the number of items to be removed, // starting at the index position specified by pos and progressing toward the end of array. console.log(vegetables) // ["Cabbage", "Carrot"] (the original array is changed) console.log(removedItems) // ["Turnip", "Radish"]
11、复制一个数组
let shallowCopy = fruits.slice() // this is how to make a copy // ["Strawberry", "Mango"]