数组基础
约 556 字大约 2 分钟
2026-02-26
数组是 JavaScript 中最常用的数据结构之一。它本质上是一个“按索引组织数据”的特殊对象,适合处理有顺序的数据集合。
数组的创建方式
字面量
const arr1 = []
const arr2 = [1, 2, 3]构造函数
const arr1 = new Array() // []
const arr2 = new Array(3) // [empty × 3],长度为 3 的稀疏数组
const arr3 = new Array(1, 2, 3) // [1, 2, 3]Array.of
const arr1 = Array.of(3) // [3]
const arr2 = Array.of(1, 2, 3) // [1, 2, 3]注
new Array(3) 和 Array.of(3) 语义不同:
new Array(3)表示长度为 3Array.of(3)表示只有一个元素3
数组的本质与索引
数组的索引(0、1、2...)本质上也是对象的属性名。
const arr = [10, 20, 30]
console.log(arr[0]) // 10
console.log(arr['1']) // 20(索引本质是属性)
console.log(arr.length) // 3稀疏数组与 empty
稀疏数组是“有长度,但某些位置没有真实元素”的数组。
const arr = [, , 3]
console.log(arr.length) // 3
console.log(arr[0]) // undefined
console.log(0 in arr) // false,说明这个位置其实是空洞数组的增删改查
const arr = [1, 2, 3]
// 查
console.log(arr[1]) // 2
// 改
arr[1] = 200
console.log(arr) // [1, 200, 3]
// 增
arr[3] = 4
console.log(arr) // [1, 200, 3, 4]
// 删(会留下空洞,不推荐作为常规删除方式)
delete arr[0]
console.log(arr) // [empty, 200, 3, 4]数组去重
字符串去重
const str = '111112222200000aaabb'
String.prototype.unique = function unique() {
const seen = {}
let result = ''
for (let i = 0; i < this.length; i += 1) {
const ch = this[i]
if (!Object.prototype.hasOwnProperty.call(seen, ch)) {
seen[ch] = true
result += ch
}
}
return result
}
console.log(str.unique()) // '120ab'数组去重
对象法(兼容旧环境)
const arr = [0, 0, 1, 1, 2, 2, 3, 'a', 'a']
Array.prototype.unique = function unique() {
const seen = {}
const result = []
for (let i = 0; i < this.length; i += 1) {
const item = this[i]
if (!Object.prototype.hasOwnProperty.call(seen, item)) {
seen[item] = true
result.push(item)
}
}
return result
}
console.log(arr.unique()) // [0, 1, 2, 3, 'a']Set(现代写法)
const arr = [0, 0, 1, 1, 2, 2, 3, 'a', 'a']
const deduped = [...new Set(arr)]
console.log(deduped) // [0, 1, 2, 3, 'a']找出第一个不重复字符
const str = 'aaaaaaaaasvvvvvvvvvsdfwwekijihhh'
function firstUniqueChar(input) {
const counter = {}
for (let i = 0; i < input.length; i += 1) {
const ch = input[i]
counter[ch] = (counter[ch] || 0) + 1
}
for (let i = 0; i < input.length; i += 1) {
const ch = input[i]
if (counter[ch] === 1) {
return ch
}
}
return undefined
}
console.log(firstUniqueChar(str))