【发布时间】:2016-07-13 08:28:51
【问题描述】:
我有多个要递归合并的 javascript 对象。 这些对象有一些我在合并时添加在一起的数字属性。 这些对象也有一些Map 属性。以下是我的对象在开发者控制台中的外观示例:
byGender:Map
0:{"Male" => 9}
key:"Male"
value:9
1:{"Female" => 11}
key:"Female"
value:11
byType:Map
0:{"Teens" => Object}
key:"Teens"
value:Object
byGender:Map
0:{"Guys" => 7}
key:"Guys"
value:7
1:{"Girls" => 10}
key:"Girls"
value:10
total:17
1:{"Chaperones" => Object}
key:"Chaperones"
value:Object
byGender:Map
0:{"Ladies" => 1}
key:"Ladies"
value:1
1:{"Men" => 2}
key:"Men"
value:2
total:3
total:42
我想合并这些 Map 对象的值,以便将所有匹配键的数量加在一起。
我正在使用_.mergeWith 及其定制器功能。我可以成功合并简单的数字属性,但是如何也合并 Map 对象呢?现在我的定制器合并功能只是替换 Map 对象,所以最后一个获胜。 这是我与 _.mergeWith 一起使用的定制器功能
var merger = function (a, b) {
if (_.isNumber(a)) {
return a + b;
} else {
return _.mergeWith(a, b, merger);
}
};
搜索时很难找到答案,因为“map”关键字只是拉出一堆 .map() 结果,而不是 Map 对象。
【问题讨论】:
-
我为您解释的内容创建了一个 jsFiddle jsfiddle.net/assvfk2b/5,但我不确定您合并地图对象是什么意思,请您编辑 jsFiddle 并告诉我您到底需要什么。
-
我更新了小提琴以显示我正在使用的实际数据结构。它利用了 javascript 中的 Map 对象。
标签: javascript merge lodash