【问题标题】:Merge two javascript objects if key is equal with either lodash, vanilla js, or d3如果 key 与 lodash、vanilla js 或 d3 相等,则合并两个 javascript 对象
【发布时间】:2014-06-04 20:32:42
【问题描述】:

我有 3 个类似的 javascript 对象。

var gdp = {
    "city": city,
    "gdp": [],  
};

var income = {
    "city": city,
    "income": [],  
};

var uRate = {
    "city": city,
    "uRate": [],  
};

我有很多城市 (n=28),[] 是我的整数数据数组,每个整数长度一致:gdp, income, 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 解决方案。

谢谢。

【问题讨论】:

  • 您需要将return 移动到循环之后。另外,i 是什么?
  • 好的,我已经把它们搬过来了,谢谢。我是上次失败的尝试遗留下来的。
  • @DeBraid 你看过_.extend吗?
  • 我不太明白你在做什么。既然gdp 等有一个city 属性,那么您希望如何得出一个对象数组?最多一个city 值将匹配gdp.city 等。
  • 谢谢泰德,我试图过分简化我正在做的事情,但翻译得不好!我发现 _.merge 需要 3 个对象并将执行所需的操作!

标签: javascript sorting object d3.js lodash


【解决方案1】:

对于从 Google 登陆这里的任何人,现在使用 Object.assign() 使用 vanilla JS 很容易做到这一点。

这是与接受答案中的结果等效的零依赖:

Object.assign({}, gdp, income, uRate);

请注意,这在 IE 中不起作用,但在 Edge 中起作用。不过,polyfill 并不太重。

https://jsfiddle.net/bLhk6x6a/1/ 的工作解决方案

【讨论】:

    【解决方案2】:

    使用 lodash _.merge 将满足原问题:

    给定 3 个对象:

    var gdp = {
        "city": city,
        "gdp": [],  
    };
    
    var income = {
        "city": city,
        "income": [],  
    };
    
    var uRate = {
        "city": city,
        "uRate": [],  
    };
    

    然后引入 lodash 并执行:

    var finalData = _.merge(gdp, income, uRate);
    

    结果如你所愿:

    {
        "city": city, 
        "gdp": [],
        "income": [],
        "uRate": [] 
    }
    

    这里的工作解决方案:http://jsfiddle.net/e99KQ/3/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多