Angular 5中对普通对象执行Map类操作及转Map方法
嘿,我来帮你搞定这些对象操作的问题——其实这些都是JavaScript/TypeScript的通用操作,在Angular 5里完全适用,咱们一步步拆解:
1. 合并两个对象
合并时如果有重复属性(比如你的A),后面的对象(obj2)会覆盖前面的(obj1)。推荐两种常用方法:
扩展运算符(ES6+,简洁直观):
// 生成新的合并对象,不会修改原obj1和obj2 const mergedObj = { ...this.obj1, ...this.obj2 }; // 结果:{ A: 10, B: false, C: 'c', E: true, D: 'd' }Object.assign(兼容ES5):
第一个参数是目标对象,后面的是源对象。如果不想修改原对象,记得传空对象当目标:const mergedObj2 = Object.assign({}, this.obj1, this.obj2); // 结果和上面完全一致
2. 删除对象属性
分两种场景,看你要不要保留原对象:
直接修改原对象:delete操作符:
// 删除obj1的A属性 delete this.obj1.A; // 此时obj1变为:{ B: false, C: 'c' }不修改原对象:解构赋值(推荐,符合 immutable 思路):
生成一个新对象,排除你要删除的属性:// 提取A属性,剩下的放到restObj1里 const { A, ...restObj1 } = this.obj1; // restObj1是 { B: false, C: 'c' },原obj1完全不变
3. 将普通对象转换为Map
TypeScript/JavaScript里可以用Object.entries()配合Map构造函数快速转换——Object.entries()会把对象转成[key, value]格式的数组,而Map正好支持用这种数组初始化:
// 把obj1转换成Map const obj1Map = new Map(Object.entries(this.obj1)); // 验证:获取键'A'对应的值 console.log(obj1Map.get('A')); // 输出 5
如果是obj2转Map,同理:
const obj2Map = new Map(Object.entries(this.obj2));
4. 对Map执行类操作
转成Map后,就能用它的原生方法来操作了,举几个常用的:
遍历键值对:
// 方法1:forEach obj1Map.forEach((value, key) => { console.log(`键:${key},值:${value}`); }); // 方法2:for...of循环 for (const [key, value] of obj1Map) { console.log(key, value); }新增/修改属性:
obj1Map.set('E', true); // 新增E属性,或者修改已有属性的值删除属性:
obj1Map.delete('C'); // 删除键为'C'的条目检查属性是否存在:
const hasB = obj1Map.has('B'); // 返回true获取所有键/值:
const keys = Array.from(obj1Map.keys()); // 转成数组:['A', 'B', 'C'] const values = Array.from(obj1Map.values()); // 转成数组:[5, false, 'c']
内容的提问来源于stack exchange,提问作者Ebraheem Alrabeea
相关产品推荐
相关产品推荐

