如何将对象中的数据合并至已有的Map?
如何将对象中的数据合并至已有的Map?
从对象创建Map可以使用以下代码:
const myMap = new Map(Object.entries(myObject));
要无需使用for循环将对象数据合并至已有的Map,有以下几种简洁方式:
方法一:利用Object.entries() + Array.prototype.forEach()
Object.entries()会将对象的可枚举键值对转换为二维数组,再通过forEach遍历数组,调用Map.prototype.set()完成合并(已有键的值会被覆盖,不存在的键会被新增):
const myObject = { test: "blah", ok: 123 } const myMap = new Map(Object.entries(myObject)); const mySecondObject = { test: "new value", foo: "bar" } // 合并逻辑 Object.entries(mySecondObject).forEach(([key, value]) => myMap.set(key, value)); console.log({size: myMap.size, test: myMap.get("test"), myMap});
方法二:处理包含不可枚举属性/Symbol键的场景
如果需要合并对象的不可枚举属性或Symbol类型的键,可以使用Reflect.ownKeys()获取对象所有自有键(包括Symbol),再配合遍历完成合并:
// 示例:包含Symbol键的对象 const symKey = Symbol("uniqueKey"); const mySecondObject = { test: "new value", foo: "bar", [symKey]: "symbolValue" }; // 合并所有自有键(包括Symbol) Reflect.ownKeys(mySecondObject).forEach(key => { myMap.set(key, mySecondObject[key]); });
注意:如果只是合并常规的可枚举字符串键,方法一已经足够简洁高效。
内容的提问来源于stack exchange,提问作者vanowm
相关产品推荐
相关产品推荐

