栈是一种LIFO(Last-In-First-Out后进先出)的数据结构。栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置----栈的顶部
队列数据结构的访问规则是FIFO(First-In-First-Out先进先出),队列在列表的末端添加项,从列表的前端移除项
push/pop
push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度
var colors = new Array()
var count = colors.push("red","green")
console.log(count) // 2
pop()方法则从数组末尾移除最后一项,减少数组的length值,然后返回移除项
var item = colors.pop()
console.log(item) // green
shift/unshift
shift()方法移除数组中第一项并返回该项,同时将数组长度减1
var colors = ["red", "green"]
var item = colors.shift()
console.log(item) // red
unshift()方法在数组前端添加任意个项并返回新数组的长度
var colors = new Array()
var count = colors.unshift("red","green")
console.log(count) // 2
console.log(colors) // ["red","green"]
reverse
reverse()反转数组的顺序
var values = [1, 2, 3, 4, 5]
values.reverse()
console.log(values) // 5, 4, 3, 2, 1
sort
sort()方法按升序排列数组--即最小的值位于最前面,最大的值排在最后面。sort方法实现排序时会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序
// 即使数组中的每一项都是数值,sort()方法比较的也是字符串
var values = [1, 10, 3, 14, 5]
values.sort()
console.log(values) // 1, 10, 14, 3, 5
sort()接收一个比较函数作为参数,确定排序顺序
var values = [1, 10, 3, 14, 5]
function compare (value1, value2) {
if (value1 > value2) {
return -1
} else if (value1 < value2) {
return 1
} else {
return 0
}
}
values.sort(compare)
console.log(values) // 14, 10, 5, 3, 1
对于数值类型或者valueOf()方法会返回数值类型的对象类型,可以使用一个简单的比较函数
var values = [1, 10, 3, 14, 5]
function compares (value1, value2) {
return value1 - value2
}
values.sort(compares)
console.log(values) // 1, 3, 5, 10, 14
reverse()和sort()方法的返回值是经过排序之后的数组
splice
splice()方法主要用途是向数组中部插入项。使用这个方法的三种方式
-
删除:可以删除任意数量的项;传入两个参数:要删除的第一项的位置和要删除的项数
var colors = ["red", "blue", "green"] var removeItem = colors.splice(0, 2) console.log(colors) // ["green"] console.log(removeItem) // ["red", "blue"] -
插入:可以向指定位置插入任意数量的项;传入3个参数:起始位置、0(需要删除的项数)、要插入的项。如果要插入多项,可以传入第四个、第五个...以至任意多个项
var colors = ["red", "blue", "green"] var removeArr = colors.splice(1, 0, "gray", "yellow") console.log(colors) // ["red", "gray", "yellow", "blue", "green"] console.log(removeArr) //[] -
替换:向指定位置插入任意数量的项,且同时删除任意数量的项;传入3个参数:起始位置、要删除的项数、要插入的任意数量的项。插入项数不必与删除项数相等
var colors = ["red", "blue", "green"] var removeArr = colors.splice(1, 1, "gray", "yellow") console.log(colors) // ["red", "gray", "yellow", "green"] console.log(removeArr) //["blue"]
splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项,则返回一个空数组)
fill(ES6)
fill()方法可以用指定的值填充一至多个数组元素,当传入一个值时,fill()方法会用这个值重写数组中所有的值
let numbers = [1, 2, 3, 4]
numbers.fill(0)
console.log(numbers) // [0, 0, 0, 0]
如果只想改变数组一部分的值,可以传入开始索引和不包含结束索引这两个可选参数
let numbers = [2, 3, 4, 5, 6]
numbers.fill(1,2)
console.log(numbers) // [2, 3, 1, 1, 1]
let numberss = [3, 3, 3, 3, 3]
numberss.fill(0, 1, 2)
console.log(numberss) // [3, 0, 3, 3, 3]
copyWithin(ES6)
copyWithin()从数组中复制元素的值。此方法需要传入两个参数:一个是该方法开始填充值的索引位置,另一个是开始复制值的索引位置
let numbers = [2, 3, 4, 5, 6]
numbers.copyWithin(1,2)
console.log(numbers) // [2, 4, 5, 6, 6]
也可以传入第三个参数:不包含结束索引,用于指定停止复制值的位置
let numberss = [2, 3, 4, 5, 6]
numberss.copyWithin(1,0, 2)
console.log(numberss) // [2, 2, 3, 5, 6]