如何在不覆盖JSON对象的情况下将更多对象附加到JSON对象?

问题描述 投票:1回答:2

我有一个看起来像这样的JSON对象 -

0: {"": "1", company_name: ".", yearMonth: "1977-01-01", cumulative_raised: "0", rank: "1"}
1: {"": "2", company_name: ".comDominio", yearMonth: "1977-01-01", cumulative_raised: "0", rank: "2"}
2: {"": "3", company_name: ".FOX Networks", yearMonth: "1977-01-01", cumulative_raised: "0", rank: "3"}
3: {"": "4", company_name: "'Rock' Your Paper", yearMonth: "1977-01-01", cumulative_raised: "0", rank: "4"}
4: {"": "5", company_name: "( caravelo (", yearMonth: "1977-01-01", cumulative_raised: "0", rank: "5"}
5: {"": "6", company_name: "[24]7", yearMonth: "1977-01-01", cumulative_raised: "0", rank: "6"}

我想制作一个每年都有一个JSON对象,然后按照他们的等级排列公司列表,其中包含有关其名称和筹集资金的信息。它看起来像这样 -

{1977-01-01: {…}, 1977-02-01: {…}, 1977-03-01: {…}, 1977-04-01: {…}, 1977-05-01: {…}, …}
1977-01-01:
1: {name: ".FOX Networks", rank: "1", cumulative_raised: "20000"}
2: {name: "Blockcar", rank: "2", cumulative_raised: "10000"}
3: {name: "CHerry", rank: "3", cumulative_raised: "5000"}
4: {name: "TreesSimple", rank: "4", cumulative_raised: "2000"}
1977-02-01:
1: {name: "Blockcar", rank: "1", cumulative_raised: "30000"}
2: {name: "CHerry", rank: "2", cumulative_raised: "22000"}
3: {name: "Soundbus", rank: "3", cumulative_raised: "9000"}
4: {name: "Hopscotch", rank: "4", cumulative_raised: "5000"}
1977-03-01:
1: {name: "Honey", rank: "1", cumulative_raised: "30000"}
2: {name: "MangaRu", rank: "2", cumulative_raised: "22000"}
3: {name: "Hoss", rank: "3", cumulative_raised: "9000"}
4: {name: "Bread", rank: "4", cumulative_raised: "5000"}

这是我试图用它做的代码 -

d3.csv("amount-raised-month.csv", function(error, csvdata) {
    if (error) throw error;

    csvdata.forEach(function(d) {
        companies[d.yearMonth] = {}
        companies[d.yearMonth][d.rank] = {"rank": d.rank, "name": d.company_name, "raised": d.cumulative_raised}
    }) })

问题是这段代码会覆盖,而不是附加它。我结束了每年的最后一个等级。

 {1977-01-01: {…}, 1977-02-01: {…}, 1977-03-01: {…}, 1977-04-01: {…}, 1977-05-01: {…}, …}
    1977-01-01:
    4: {name: "TreesSimple", rank: "4", cumulative_raised: "2000"}
    1977-02-01:
    4: {name: "Hopscotch", rank: "4", cumulative_raised: "5000"}
    1977-03-01:
    4: {name: "Bread", rank: "4", cumulative_raised: "5000"}

如何每次附加新的JSON对象而不是覆盖?

javascript json
2个回答
2
投票

您使用{}覆盖了以前的对象:

companies[d.yearMonth] = {}

试试这个:

companies[d.yearMonth] = companies[d.yearMonth] || {};

或使用if语句:

if (!companies[d.yearMonth]) companies[d.yearMonth] = {};

0
投票

根据原始JSON中原始yearMonth属性的值创建一个Set。

迭代这个集合。在每次迭代时,过滤原始JSON,比较this yearMonth属性。过滤后的数组将包含yearMonth公司。我现在无法提供代码示例,但我希望你能得到这个想法。

© www.soinside.com 2019 - 2024. All rights reserved.