javascript - 如果 key 与 lodash、vanilla js 或 d3 相等,则合并两个 javascript 对象

标签 javascript sorting object d3.js lodash

我有 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/

相关文章:

c++ - 用相同的数据填充数组对象还是使用指针?

php - 如何在 PHP 中释放内存?

javascript - 如何创建javascript自动关闭elament的效果?

javascript - Javascript 中的正则表达式查找所有括号结构

javascript - 如何在 2d 游戏中对对象进行排序?

c# - 有没有办法对列表中的 Color 元素进行排序(c#)?

c++ - 为什么析构函数被调用两次?

javascript - 加载 Iframe 时 JavaScript 隐藏白色 Flash

javascript - V-bind等级多种选择

python - 使用递归对仅包含 0 和 1 的列表进行排序