我有 3 个类似的 javascript 对象。
var gdp = {
"city": city,
"gdp": [],
};
var income = {
"city": city,
"income": [],
};
var uRate = {
"city": city,
"uRate": [],
};
我有很多城市 (n=28),[]
是我的整数数据数组,每个城市的长度统一:gdp、收入、uRate
。
目标:将这些组合成每个城市的单个对象:
var finalData = {
"city": city,
"gdp": [],
"income": [],
"uRate": []
}
我尝试过以下的变体。
if ( ObjA.city == ObjB.city ) { Obj.city.metric = this.metric] };
或者,如果城市匹配,则将指标(gdp、收入或 uRate)添加到 finalData
对象中。
cities.forEach(function ( city ) {
var metrics = ['gdp', 'income', 'uRate'];
metrics.forEach(function ( metric ) {
if ( metric.city == city ) { // edit: removed i
var finalData = {
"city": city,
"gdp": [],
"income": [],
"uRate": []
};
}
})
return finalData; // edit: moved this per suggestion
};
下面是一个使用 $.extend() 和 jQuery 的类似示例:How to merge two object values by keys ,但我没有使用 jQuery,并且更喜欢 lodash、d3.js 或 vanilla js 解决方案。
谢谢。
最佳答案
对于任何从 Google 登陆这里的人来说,现在使用 Object.assign() 使用 vanilla JS 可以很容易地做到这一点。 .
这是一个零依赖,相当于接受的答案中的结果:
Object.assign({}, gdp, income, uRate);
请注意,这在 IE 中不起作用,但在 Edge 中可以。 polyfill不过也不算太重。
工作解决方案位于 https://jsfiddle.net/bLhk6x6a/1/
关于javascript - 如果 key 与 lodash、vanilla js 或 d3 相等,则合并两个 javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23186187/