如果key与lodash,vanilla js或d3相等,则合并两个javascript对象 [英] Merge two javascript objects if key is equal with either lodash, vanilla js, or d3

查看:235
本文介绍了如果key与lodash,vanilla js或d3相等,则合并两个javascript对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有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,income或uRate)到 finalData 对象。

  cities.forEach(function(city){

var metrics = ['gdp','收入','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 如何通过键合并两个json对象值,但我不使用jQuery,并且更喜欢lodash,d3.js或者vanilla js解决方案。



谢谢。

使用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/


I have 3 similar javascript objects.

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

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

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

Where I have many cities (n=28), and [] is my data array of integers with uniform length for each: gdp, income, uRate.

GOAL: Combine these into a single object for each city:

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

I've tried variations of the following.

if ( ObjA.city == ObjB.city ) { Obj.city.metric = this.metric] };

Or, if city matches, add the metric (either gdp, income or uRate) to the finalData object.

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

};

Here is a similar example using $.extend() with jQuery: How to merge two json objects values by keys, but I am not using jQuery and would prefer either lodash, d3.js or vanilla js solution.

Thank You.

解决方案

Using lodash _.merge will satisfy the original question:

Given 3 objects:

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

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

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

Then bring in lodash and do:

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

and the result is as desired:

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

Working solution here: http://jsfiddle.net/e99KQ/3/

这篇关于如果key与lodash,vanilla js或d3相等,则合并两个javascript对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆