可改变数组的方法

206 阅读3分钟

栈是一种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]