TypeScript Array(数组)

数组是存放一组相同类型元素的容器。TypeScript 的数组在声明时必须(或由 TS 自动推断)确定元素类型,从而在编译阶段就拦截掉类型错误。

声明数组

数组类型有两种写法:类型[] 与泛型 Array<类型>

let nums: number[] = [1, 2, 3];            // 推荐写法
let names: Array<string> = ["张三", "李四"]; // 泛型写法
let mixed: (string | number)[] = ["a", 1]; // 联合类型数组
let empty: number[] = [];                  // 空数组

访问元素与遍历

下标从 0 开始;可以用 for、for...of 或 forEach 遍历:

let scores: number[] = [90, 85, 78];
console.log(scores[0]);     // 输出:90
console.log(scores.length); // 输出:3

for (let i = 0; i < scores.length; i++) {
  console.log(scores[i]);   // 逐行输出 90、85、78
}
scores.forEach((s) => console.log("分数:" + s));
for (let s of scores) {
  console.log(s);           // for...of 直接取元素
}

增删元素

push / pop 在尾部增删,unshift / shift 在头部增删:

let arr: number[] = [1, 2, 3];
arr.push(4);                  // [1, 2, 3, 4]
console.log(arr.pop());       // 输出:4,并删除尾部元素
arr.unshift(0);               // [0, 1, 2, 3]
console.log(arr.shift());     // 输出:0,并删除头部元素
console.log(arr);             // 输出:[ 1, 2, 3 ]

查找元素

indexOf 返回下标,includes 判断是否存在,find 返回第一个符合条件的元素:

let colors: string[] = ["red", "green", "blue"];
console.log(colors.indexOf("green"));  // 输出:1
console.log(colors.includes("red"));   // 输出:true
let long = colors.find((c) => c.length > 3); // 找到 "green"
console.log(long);                     // 输出:green

map / filter / reduce

这三个方法不修改原数组,而是返回新数组或新值,适合做数据变换:

let nums: number[] = [1, 2, 3, 4];
let doubled: number[] = nums.map((n) => n * 2);            // [2, 4, 6, 8]
let evens: number[] = nums.filter((n) => n % 2 === 0);     // [2, 4]
let total: number = nums.reduce((sum, n) => sum + n, 0);   // 10
console.log(doubled);  // 输出:[ 2, 4, 6, 8 ]
console.log(evens);    // 输出:[ 2, 4 ]
console.log(total);    // 输出:10

小结

数组是 TypeScript 最常用的数据结构:声明时明确元素类型,熟练运用增删、遍历以及 map / filter / reduce 等方法,代码会更简洁、更安全。

笔记加载中…