J'ai un objet JSON qui ressemble à ceci -

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"}

J'aimerais créer un objet JSON qui a chaque yearMonth, puis une liste des entreprises par ordre de rang contenant des informations sur leur nom et l'argent collecté. Cela ressemblerait à ceci -

{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"}

C'est le code avec lequel j'essaie de le faire -

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}
    }) })

Le problème est que ce code écrase, au lieu de l'ajouter. Je me retrouve avec juste le dernier rang pour chaque annéeMois.

 {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"}

Comment puis-je ajouter le nouvel objet JSON à chaque fois au lieu de l'écraser ?

1
Cauder 16 mars 2019 à 23:02

2 réponses

Meilleure réponse

Vous écrasez votre objet précédent avec {} :

companies[d.yearMonth] = {}

Essayez plutôt ceci:

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

Ou utilisez une instruction if :

if (!companies[d.yearMonth]) companies[d.yearMonth] = {};
2
jo_va 16 mars 2019 à 20:12

Créez un ensemble basé sur les valeurs de l'attribut yearMonth d'origine dans le JSON d'origine.

Itérer cet ensemble. À chaque itération, filtrez le JSON d'origine en comparant cet attribut yearMonth. Le tableau filtré contiendra les entreprises par annéeMois. Je ne peux pas fournir d'exemple de code pour le moment, mais j'espère que vous comprenez l'idée.

0
Diego Victor de Jesus 16 mars 2019 à 20:29