TypeScript 中对象键值对操作及排序示例
在 Python 中,我们可以通过d['k'] = v向字典d添加键值对,并通过d['k']获取值。在 TypeScript 中,使用对象(Object)可以实现类似的功能,同时还能通过数组方法实现按键或按值排序。
一、添加和获取键值对(类似 Python 字典操作)
TypeScript 中通过对象字面量或接口定义的对象,支持动态添加和访问键值对,语法与 Python 字典类似。
基础示例
css
// 1. 定义一个空对象(类似Python的空字典 {})
let d: { [key: string]: any } = {}; // [key: string] 表示键为字符串类型,值为任意类型
// 2. 添加键值对(类似 Python 的 d['k'] = v)
d['name'] = 'TypeScript';
d['version'] = 5.2;
d['isPopular'] = true;
// 3. 获取值(类似 Python 的 d['k'])
console.log(d['name']); // 输出:TypeScript
console.log(d['version']); // 输出:5.2
类型约束(推荐)
为了保持 TypeScript 的类型安全,可指定键和值的具体类型(类似 Python 的类型注解):
css
// 键为 string 类型,值为 number 类型(如统计分数)
let scores: { [key: string]: number } = {};
scores['Alice'] = 95;
scores['Bob'] = 88;
console.log(scores['Alice']); // 输出:95
二、对象按键(key)排序
Python 中可通过sorted(d.keys())获取排序后的键,TypeScript 需先将对象转换为键值对数组,再排序。
实现步骤:
- 用Object.entries()将对象转为[key, value]数组;
- 用sort()按键排序;
- (可选)转回对象(注意:对象本身是无序的,排序后通常保留数组形式)。
css
// 原始对象
const d: { [key: string]: number } = {
'banana': 3,
'apple': 5,
'cherry': 2
};
// 1. 转为 [key, value] 数组
const entries = Object.entries(d); // 结果:[ ['banana', 3], ['apple', 5], ['cherry', 2] ]
// 2. 按键(key)升序排序(字母顺序)
const sortedByKey = entries.sort((a, b) => {
if (a[0] < b[0]) return -1; // a的键在b前面
if (a[0] > b[0]) return 1;
return 0;
});
console.log('按键排序结果:', sortedByKey);
// 输出:[ ['apple', 5], ['banana', 3], ['cherry', 2] ]
三、对象按值(value)排序
类似按键排序,区别是排序依据为数组中的第二个元素(值)。
css
// 原始对象(同上)
const d: { [key: string]: number } = {
'banana': 3,
'apple': 5,
'cherry': 2
};
// 1. 转为 [key, value] 数组
const entries = Object.entries(d);
// 2. 按值(value)升序排序(数字大小)
const sortedByValue = entries.sort((a, b) => {
return a[1] - b[1]; // 数字相减,负数表示a的值更小
});
console.log('按值排序结果:', sortedByValue);
// 输出:[ ['cherry', 2], ['banana', 3], ['apple', 5] ]
// 按值降序排序(反转结果)
const sortedByValueDesc = entries.sort((a, b) => b[1] - a[1]);
console.log('按值降序排序结果:', sortedByValueDesc);
// 输出:[ ['apple', 5], ['banana', 3], ['cherry', 2] ]
四、与 Python 的对比总结
操作 | Python 代码 | TypeScript 代码 |
---|---|---|
添加键值对 | d['k'] = v | d['k'] = v |
获取值 | d['k'] | d['k'] |
按键排序(返回数组) | sorted(d.items(), key=lambda x: x[0]) | Object.entries(d).sort((a,b) => a[0].localeCompare(b[0])) |
按值排序(返回数组) | sorted(d.items(), key=lambda x: x[1]) | Object.entries(d).sort((a,b) => a[1] - b[1]) |
注意:TypeScript 的对象本身不保证顺序(ES6+ 实际保留插入顺序),排序后通常以数组形式使用,更符合有序遍历的需求。
##🚀 五、 操作扩展技巧
- 合并对象(类似 Python 字典的 update())
css
const d1 = { a: 1 };
Object.assign(d1, { b: 2 }); // d1 变为 { a: 1, b: 2 }
- 删除键
go
delete d["k"]; // 对象方案
d.delete("k"); // Map 方案
- 默认值处理
ini
const value = d["unknown"] ?? "default"; // 对象方案
const value = d.get("unknown") || "default"; // Map 方案
Map方案代码,适合:键类型复杂(如对象)、需严格迭代顺序或高频增删
typescript
// 初始化 Map(键类型为 string,值类型为 any)
const d = new Map<string, any>();
// 操作示例
d.set("k", "v"); // 添加键值对
console.log(d.get("k")); // 输出 "v"(访问值)
// 支持遍历
for (const [key, value] of d) {
console.log(`${key}: ${value}`);
}