数组方法

2019-10-02  本文已影响0人  明明你也一样

检测数组

let arr = []
arr instanceof Array // true
// instanceof操作符的问题在于,如果存在多个不同的全局执行环境,从而有多个Array构造函数,就会导致无法确定数组实例

// 为了解决这个问题,ES5新增Array.isArray()方法
Array.isArray(arr) // true

转换方法

toString

把数组转换成字符串,并用逗号分隔开来

let arr = ['red','green']
arr.toString() // 'red,green'

join

把数组转换成字符串,并用指定的字符分割开来
注意:如果数组里的某项是null或undefined,那么该值转化成字符串时是空字符串

let arr = ['red', 'green']
arr.join('|') // 'red|green'

字符串的split()与它相反,用指定字符分割并组成数组

let str = 'red,green'
str.split(',') // ['red', 'green']

栈方法

push

push()方法可以接收任意数量的参数,并把它们逐个添加到末尾
并返回修改后数组的长度

let arr = []
arr.push('red') // 返回1

pop

pop()方法移除数组的最后一项,并且返回移除项

let arr = ['red']
arr.pop() // 返回'red'

队列方法

shift

shift()把数组的第一项移除并且返回移除项

let arr = ['red', 'green']
arr.shift() // 返回'red'

unshift

unshift()可以接收任意数量的参数,并把它们添加到数组前端
最后返回数组的长度

let arr = []
arr.unshift('red') // 返回1

重排序方法

reserve

反转数组的顺序

var arr = [1, 2]
arr.reverse() // [2, 1]

sort

默认情况下升序排序
把每个元素先toString(),然后再比较大小,所以不适用于数字比较

// 不是想要的排序
let arr = [10, 5, 1]
arr.sort() // [1, 10, 5]

使用比较函数排序

// 正确的排序
let arr = [10, 5, 1]
arr.sort(function(a, b) {return a - b}) //  [1, 5, 10]

操作方法

concat

基于当前数组创建一个新的数组(拼接数组)
具体来说,这个方法会先创建一个当前数组的副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组。

let arr1 = ['red']
let arr2 = arr1.concat('green', ['black', 'yellow'])
arr2 // ['red', 'green', 'black', 'yellow']
arr1 // ['red']

slice

基于当前数组中的一项或多项创建一个新的数组(截取数组)
原来的数组不会改变

let arr = ['red', 'green', 'yellow']
arr.slice() // 复制一个新的数组
arr.slice(1) // 从第1项开始复制,返回新的数组 ['green', 'yellow']
arr.slice(1, 3) // 从第1项开始复制, 复制到第3项为止(但是不包括第3项),返回新的数组 ['green', 'yellow']
如果参数有负数,则负数用数组的长度加上该负数来确定
如果结束位置小于开始位置,则返回空数组

splice

splice会破坏原来的数组

删除

两个参数
splice(从第几项开始删除, 删除几个)
返回被删除的数组

let arr = ['red', 'green', 'yellow']
arr.splice(1, 2) // 从第1项开始,删除2个元素,返回 ['green','yellow']
arr // ['red']
插入和替换

三个参数及以上
splice(从第几项开始删除, 要删除的项数, 要插入的项)
返回被删除的数组

let arr = ['red', 'green', 'yellow']
arr.splice(1, 2, 'black', 'purple')  // 从第1项开始,删除2个元素,然后从第1项开始添加
arr // ['red', 'black', 'purple']

位置方法

indexOf()、lastIndexOf()分别从开头/末尾开始查找
返回指定元素在数组中的位置,如果没有,则返回-1

let arr = ['red', 'green']
arr.indexOf('green') // 1
// 可选的第二个参数表示从哪个位置开始找,默认为0
let arr = ['red', 'green','black']
arr.indexOf('green', 2) // -1

迭代方法

每个方法都接收两个参数

every

如果函数对每一项都返回true,则返回true(查询是否满足某个条件)
如果有一项返回false,则直接返回false,并且不会再对后面的项运行函数

some

如果函数对某一项返回true,则返回true(查询是否满足某个条件)
如果有一项返回true,则直接返回true,并且不会再对后面的项运行函数

var arr = [1, 2, 3, 4, 5]
arr.every(function(item, index, arr) {
    return item > 2
}) // false
arr.some(function(item, index, arr) {
    return item > 2
}) // true

fliter

对数组中的每一项运行给定函数,返回函数会返回true的项组成的数组

// 返回大于2的项
var arr = [1, 2, 3, 4, 5]
arr.filter(function(item, index, arr) {
    return item > 2
}) // [3, 4, 5]

map

对数组中的每一项运行给定函数,返回每次函数调用结果组成的数组

// 每项的两倍
var arr = [1, 2, 3, 4, 5]
arr.map(function(item, index, arr) {
    return item * 2
}) // [2, 4, 6, 8, 10]

forEach

对数组的每一项运行给定函数,没有返回结果
就是for循环的代替而已

var arr = [1, 2, 3, 4, 5]
arr.forEach(function(item, index, arr) {
    // 执行某些操作
})

归并方法

reduce

从第一项开始,逐个遍历到最后
接受两个参数

  1. 第一个参数是每一项上调用的函数
    该函数又接受4个参数,分别是:前一个值, 当前值, 当前项的索引, 数组对象
    这个函数的返回值会作为第一个参数自动传给下一项
    第一次迭代发生在数组的第二项,因此第一个参数是数组的第一项,第二个参数是数组的第二项

  2. (可选的)第二个参数是作为归并基础的初始值

// 计算数组每项之和
// 第一次迭代,prev是1,cur是2, 返回3
// 第二次迭代,prev是3,cur是3, 返回6
var arr = [1, 2, 3]
arr.reduce(function(prev, cur, index, arr) {
    return prev + cur
}) // 6

reduceRight

类似,只是从最后开始遍历到第一项。

上一篇下一篇

猜你喜欢

热点阅读