Array

coderljw 2024-10-13 JS 基础
  • JS 基础
  • Array
大约 2 分钟

提示

会改变原数组

# 1. unshift(any...) & push(any...)

  • 在数组首/尾添加数据,返回添加后数组的长度。
[1, 2, 3, 4, 5].unshift(0) // => 6
[1, 2, 3, 4, 5].unshift(0, 7) // => 7

[1, 2, 3, 4, 5].push(6) // => 6
[1, 2, 3, 4, 5].push(6, 7) // => 7
1
2
3
4
5

# 2. shift() & pop()

  • 删除数组第一项/最后一项,返回删除的值。
[1, 2, 3, 4, 5].shift() // => 1
[1, 2, 3, 4, 5].pop() // => 5
1
2

# 3. splice(startIndex, length, addItem...)

  • 可用于数组的增删改操作,返回删除项组成的数组。

  • 若删除长度未指定,删除至结束,负数反序计算。开始索引溢出,或删除长度为负数,等同于未操作数组

[1, 2, 3, 4, 5].splice(3) // => [4, 5]
[1, 2, 3, 4, 5].splice(-2, 1) // => [4]
[1, 2, 3, 4, 5].splice(3, 2, 'jack', 'love') // => [4, 5]

[1, 2, 3, 4, 5].splice(6) // => []
[1, 2, 3, 4, 5].splice(1, -1) // => []
1
2
3
4
5
6

# 4. reverse()

  • 翻转数组。
[1, 2, 3, 4, 5].reverse()
1

# 5. sort(compareFunction)

  • 默认把所有元素先转换为 String 再排序,按照第一个字符的 ASCII 值排序。

  • compareFunction(比较器):返回负数时,第一个参数排在前面;返回正数时,第二个参数排在前面。

  • ECMAScript 没有定义用哪个排序算法,所以浏览器厂商可以自行去实现算法。自 ES10(EcmaScript 2019)起,规范要求 Array.prototype.sort 为稳定排序。

    • Mozilla Firefox 使用归并排序作为 Array.prototype.sort 的实现(归并排序是稳定的)。
    • Chrome 在 V8 引擎 7.0 版本前使用了一个快速排序的变体:插入排序和快速排序结合的排序算法。数组长度不超过 10 时,使用插入排序(在数组长度较短时插入排序更有效率),长度超过 10 使用优化的快速排序(快速排序是不稳定的)。在 7.0 版本之后采用了一种混合排序算法 TimSort:在数据量小的子数组中使用插入排序,然后再使用归并排序将有序的子数组进行合并排序。
[2, 7, 3, 15].sort() // => [15, 2, 3, 7]
// 升序
[2, 7, 3, 15].sort((a, b) => a - b) // => [2, 3, 7, 15]
// 降序
[2, 7, 3, 15].sort((a, b) => b - a) // => [15, 7, 3, 2]
1
2
3
4
5

# 6. copyWithin(targetIndex, beginIndex, endIndex)

  • 从数组中复制一部分到数组的另一个位置,覆盖这个位置原来的值。

  • 未指定开始索引,开始索引则为 0,未指定结束索引,则截取自末尾(包含开始索引,不包含结束索引)。

[1, 2, 3, 4, 5].copyWithin(2) // => [1, 2, 1, 2, 3]

// 将索引位置 [1, 3) 的项,替换到索引位置为 [2, (2 + 3 - 1)) 的项上
[1, 2, 3, 4, 5].copyWithin(2, 1, 3) // => [1, 2, 2, 3, 5]
1
2
3
4
以父之名
周杰伦.mp3