我正在尝试合并 2 个具有键和值的映射(又是映射)。
_.merge 适用于 2 个常规 map ,但不适用于 map 的 map 或嵌套 map 。
map1 = {k1: {c1: v1, c2: v2}, k2: {c1: v1, c2: v2}};
map2 = {k1: {c3: v3, c4: v4}, k2: {c3: v3, c4: v4}};
期待
mergedMap = {k1: {c1: v1, c2: v2, c3: v3, c4: v4}, k2: {c1: v1, c2: v2, c3: v3, c4: v4}};
最佳答案
使用_.mergeWith()
递归地。
ES6解决方案:
const recursiveMerge = (...args) =>
_.mergeWith({}, ...args, (objValue, srcValue) => {
if(typeof srcValue === 'object') {
return recursiveMerge(objValue, srcValue);
}
});
const map1 = {k1: {c1: 'v1', c2: 'v2'}, k2: {c1: 'v1', c2: 'v2'}};
const map2 = {k1: {c3: 'v3', c4: 'v4'}, k2: {c3: 'v3', c4: 'v4'}};
const result = recursiveMerge(map1, map2);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
ES5解决方案:
function recursiveMerge() {
var args = [].slice.call(arguments, 0);
var params = [{}].concat(args).concat([
function(objValue, rcValue) {
if (typeof srcValue === 'object') {
return recursiveMerge(objValue, srcValue);
}
}]);
return _.mergeWith.apply(_, params);
}
var map1 = {k1: {c1: 'v1', c2: 'v2'}, k2: {c1: 'v1', c2: 'v2'}};
var map2 = {k1: {c3: 'v3', c4: 'v4'}, k2: {c3: 'v3', c4: 'v4'}};
var result = recursiveMerge(map1, map2);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
关于javascript - 通过保留相同键的所有值来合并 map 的 map (嵌套 map )es6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40136970/