coolliyong.github.io

JavaScript 数组

在计算中连续的空间,用于存储一组(多个)数据,在原来的 C89 标准中是不允许可变长数组出现的,但是在 JS 中数组长度是不固定的

特点

相对其他编程语言,JS 对数组的封装已经很完善了

const list = [1, 2, 3, 4]
list.push(1)

list.splice(1, 1)
list // -> 1,3,4 数组从是0开始

// 如果使用delete 来删除 数组中的某一项,那么原来的下标还在,只不过没有值,也遍历不到 `empty` 但是长度不变,很诡异,所以从来没有人建议咱这么做

delete list[0] // 返回true
list // -> [empty,1,2,3]

list[1] = '1'

list[1] // '1'

弹出最后一个元素

list.pop() // 4 返回弹出的元素索引

弹出第一个元素

list.shift() // 1 返回弹出的元素索引

插入元素到第一个

list.unshift(0) // 5 返回数组长度

数组长度

list.length

数组合并

list.concat([1, 2, 3])

数组反转

list.reverse()

// 手动实现 O(0.5n)
let temp = ''
const len = list.length - 1
for (let i = 0; i < len; i++) {
  if (len - i <= i) {
    break
  }
  temp = list[i]
  list[i] = list[len - i]
  list[len - i] = temp
}

数组去重

Array.from(new Set(list))

数组查找

list.indexOf(1) //  返回索引或者 -1

list.includes(1) // 是否包含 返回boolean

list.find(o => o === 1) // 返回 元素 或者undefined

list.findIndex(o => o === 1) // 返回索引或者 -1

list.filter(o => o === 1) // 返回匹配到的所有元素

数组克隆

let cpList = list.slice(0) // 不改变原数组

数组排序(api)

list.sort((a, b) => a - b) // 正序

list.sort((a, b) => b - a) // 倒序

数组算法题 35 搜索插入位置

  1. 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
  2. 你可以假设数组中无重复元素。

    输入: [1,3,5,6], 5 输出: 2

输入: [1,3,5,6], 2 输出: 1

var searchInsert = function(nums, target) {
  // 线性查找, 时间 O(n), 可以使用二分查找,因为有序的
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] > target) {
      return i > 0 ? i : 0
    } else if (nums[i] === target) {
      return i
    }
  }
  return nums.length
}