有没有一个简单的方法来合并ES6映射在一起(像Object.assign)?说到这里,ES6集合(比如Array.concat)呢?
当前回答
一个很好的解决方案,无论你是否有两个或更多的映射合并是将它们作为一个数组,并使用以下:
Array.prototype.merge = function () {
return this.reduce((p, c) => Object.assign(c, p), {});
};
其他回答
将集合转换为数组,将它们平直,最后构造函数将惟一化。
const union = (...sets) => new Set(sets.map(s => [...s]).flat());
你可以使用spread语法将它们合并在一起:
const map1 = {a: 1, b: 2}
const map2 = {b: 1, c: 2, a: 5}
const mergedMap = {...a, ...b}
=> {a: 5, b: 1, c: 2}
一个很好的解决方案,无论你是否有两个或更多的映射合并是将它们作为一个数组,并使用以下:
Array.prototype.merge = function () {
return this.reduce((p, c) => Object.assign(c, p), {});
};
集:
var merged = new Set([...set1, ...set2, ...set3])
地图:
var merged = new Map([...map1, ...map2, ...map3])
注意,如果多个映射具有相同的键,则合并映射的值将是具有该键的最后一个合并映射的值。
不,它们没有内置操作,但你可以很容易地创建自己的操作:
Map.prototype.assign = function(...maps) {
for (const m of maps)
for (const kv of m)
this.add(...kv);
return this;
};
Set.prototype.concat = function(...sets) {
const c = this.constructor;
let res = new (c[Symbol.species] || c)();
for (const set of [this, ...sets])
for (const v of set)
res.add(v);
return res;
};