在计算中连续的空间,用于存储一组(多个)数据,在原来的 C89 标准中是不允许可变长数组出现的,但是在 JS 中数组长度是不固定的
JavaScript 提供了一种拥有一些类数组(array-like)特性的对象。它把数组的下标转换成字符串
– 《JavaScript语言精粹(修订版)》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) // 不改变原数组
list.sort((a, b) => a - b) // 正序
list.sort((a, b) => b - a) // 倒序
输入: [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
}