Appearance
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)
// 存在,返回索引值
// 不存在,返回 -1findIndex()/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()