2017-09-02 111 views
0

我有一个公司和国家的json文件。创建对象的最正确方法是什么?循环遍历所有国家,我必须计算有多少公司与某个特定国家相关,以便获得结果对象,大致采用以下格式:在循环中创建对象

country = { 
    USA: 13, 
    Germany: 11, 
    Belgia: 3 
} 
+0

'变种国家= {};',然后使用'国家[国家名称] =(国家[国家名称] || 0)+ 1添加国家循环内的对象;' – 4castle

+0

可以添加例如JSON ?我们理解结构的最小量。是不是像:'[{...},...]'? – christo8989

+0

json文件,你可以在这里找到http://codeit.pro/frontTestTask/company/getList –

回答

1

你可以尝试这样的事情:(使用你在你的问题有编辑前的对象数据。)

var jsondata = {"list":[{"name":"Photolist","location":{"name":"Poland","code":"PL"},"partners":[{"name":"Oloo","value":30},{"name":"Flashset","value":87}]},{"name":"Mymm","location":{"name":"Ukraine","code":"UA"},"partners":[{"name":"Photojam","value":57},{"name":"Divavu","value":82},{"name":"Quinu","value":18}]},{"name":"Yata","location":{"name":"United States","code":"US"},"partners":[{"name":"Meetz","value":72}]},{"name":"Brainbox","location":{"name":"Norway","code":"NO"},"partners":[{"name":"Divavu","value":42}]},{"name":"Flashpoint","location":{"name":"Sweden","code":"SE"},"partners":[{"name":"Babbleopia","value":53},{"name":"Buzzdog","value":70},{"name":"Voolia","value":20}]},{"name":"Photospace","location":{"name":"Poland","code":"PL"},"partners":[{"name":"Yakitri","value":81},{"name":"Divavu","value":85},{"name":"Skimia","value":12},{"name":"Meeveo","value":27}]},{"name":"Realfire","location":{"name":"Poland","code":"PL"},"partners":[{"name":"Topicshots","value":81}]}]}; 
 

 
var countries = {}; 
 
jsondata.list.forEach(function (elem) { 
 
    if (elem.location.name in countries) { 
 
     countries[elem.location.name]++; 
 
    } else { 
 
     countries[elem.location.name] = 1; 
 
    } 
 
}); 
 

 
console.log(countries);

+0

你有使用'map'而不是'reduce'的原因吗?我觉得这个问题更适合“减少”。 – christo8989

+0

@ christo8989那么最初的想法是我将值映射到数组中的新值,但想到它,它并没有做更多的事情,只是循环遍历每个元素......我只是将它更改为的forEach。 – Ivar

1

你会想JSON.parse json并使用Array.reduce来获取你的对象。

var companies = JSON.parse(json).list; //<-- unsafe for production 
var countries = companies.reduce(function(countries, company) { 
    var country = company.location.name; 
    if (typeof countries[country] === 'undefined' || countries[country] === null) { 
     countries[country] = 1; 
    } else { 
     countries[country]++; 
    } 

    return countries; 
}, {});