Skip to content

Array

数组是一种特殊的对象,适用于存储和管理有序的数据项。

ts
let list: number[] = [1, 2, 3]

let list: Array<number> = [1, 2, 3]

pop()/push()

在末端增加/删除元素

js
arr.push(4)
arr.push(4, 5, 6)
// 可以增加多个,并返回数组长度

arr.pop()
// 只能删除一个,并返回该元素

shift()/unshift()

在首端增加/删除元素

pop/push 速度和性能总是优于 shift/unshift

js
arr.unshift(4)
arr.unshift(4, 5, 6)
// 可以增加多个,并返回数组长度

arr.shift()
// 只能删除一个,并返回该元素

splice()

从开始位置,删除指定个数,并插入新元素,修改原数组

js
arr.splice(startIndex, delCount, ...item)
// 返回被删除的部分

// 只删除
arr.splice(startIndex, delCount)

// 只插入
arr.splice(startIndex, 0, ...item)

slice()

截取新数组,不修改原数组

包括 startIndex 不包括 endIndex

js
arr.slice(startIndex, endIndex)
// 返回被截取的部分

// 浅拷贝
arr.slice()

concat()

合并数组

产生新的副本,所有源都不会修改

js
arr.concat(arr1, arr2, arr3)

a.concat(b, c, d)
// a,b,c,d 都不会修改,产生新的副本

map()

数组转换,将数组元素进行修改,产生新的副本,不修改原数组

js
arr.map((item, index, array) => {
  return {
    ...item,
    isNew: true
  }
})

sort()

数组排序

修改原数组

传入一个方法,返回 true 则交换元素,否则则不交换

js
arr.sort(fn)

arr.sort((a, b) => {
  return truthy / falsy
})

// 从小到大
arr.sort((a, b) => a - b)

// 从大到小
arr.sort((a, b) => b - a)

reverse()

倒序

js
arr.reverse()

indexOf()/lastIndexOf()

搜索/查询 请使用严格相等 === ,避免 布尔型值。

js
arr.indexOf(item)
arr.indexOf(item, from)

// 存在,返回索引值
// 不存在,返回 -1

findIndex()/findLastIndex()

查索引

js
arr.findIndex()
arr.findLastIndex()

includes()

是否包含,返回 true/false

搜索/查询 请使用严格相等 === ,避免 布尔型值。

js
arr.includes(item)
arr.includes(item, from)

every()

是否所有元素都满足条件

js
arr.every((item, index, array) => {
  return truthy / falsy
})

some()

是否有元素满足条件

js
arr.some((item, index, array) => {
  return truthy / falsy
})

find()

查找数组中第一个符合条件的元素,停止迭代并返回该元素

js
arr.find((item, index, array) => {
  return truthy / falsy
})

filter()

查找数组中符合条件的元素,返回一个新数组,产生副本

js
arr.filter((item, index, array) => {
  return truthy / falsy
})

for

遍历数组最古老的方式

效率最高,性能最好,兼容最好

元素可读,可写,可修改原数组

for 作为循环语句,并不是专为遍历数组的,它的起点,范围,梯度,索引都是可以修改的,而且可以通过 break 跳出循环,这些都是数组专用的遍历方法所不具备的。

js
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i])
}

let arr = [1, 2, 3]
for (let i = 0; i < arr.length; i++) {
  arr[i] *= 2
}
// [2, 4, 6]

for..of

更简单,更现代,只能访问元素,不能访问索引值

元素只读,不可写,无法修改原数组

js
for (let item of arr) {
  console.log(item)
}

let arr = [1, 2, 3]
for (let item of arr) {
  item *= 2
}
// [1, 2, 3]

for..in

继承自对象的方法,最好别用

forEach()

遍历,为每个元素运行一个函数

元素只读,不可写,无法修改原数组

js
arr.forEach((item, index, array) => {
  console.log(item)
})

reduce()

接力赛,根据数组计算单个结果

将每一项的计算结果搬运到下一项并进行下一次的计算

js
arr.reduce(
  (accumulator, item, index, array) => {
    return item
  },
  [initial]
)

// accumulator 上一项的结果 或 初始值
// item 当前元素
// return 返回最终结果

// 求和
arr.reduce((sum, item) => {
  return sum + item
}, 0)

// 反向
arr.reduceRight()