Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment changer l'organization d'un objet

    4 décembre 2019 à 22:12:39

    Bonjour j'ai essayé de transformer un object mais je n'y arrive pas, est-ce que quelqu'un aurais une ou plusieurs méthode pour transformer des objets. Voici l'object à transfomer (en json)
    *Input object*
    {
        "peoples": [
            {
                "name": "Alain",
                "nationality": "Italian"
            },
            {
                "name": "John",
                "nationality": "French"
            },
            {
                "name": "FOO",
                "nationality": "French"
            }
        ]
    }
    output
    {
        "nationality": {
            "french": {
                "peoples": [{ "name": "John" }, { "name": "FOO" }]
            },
            "italian": {
                "peoples": [{ "name": "Alain" }]
            }
        }
    }

    -
    Edité par MattèoGauthier 4 décembre 2019 à 22:13:55

    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2019 à 22:24:57

      Bonjour,

      Il faut que tu boucles sur le tableau "people" et que tu crées un nouvel objet pour pouvoir trier les personnes par nationalité.

      • Partager sur Facebook
      • Partager sur Twitter
      "Ils ne savaient pas que c'était impossible, alors ils l'ont fait" Mark Twain
        4 décembre 2019 à 23:10:10

        Salut,

        const a = {
            "peoples": [
                {
                    "name": "Alain",
                    "nationality": "Italian"
                },
                {
                    "name": "John",
                    "nationality": "French"
                },
                {
                    "name": "FOO",
                    "nationality": "French"
                }
            ]
        };
         
        const b = {
            nationality: a.peoples.filter(function (x)
            {
                return !this.some(y => x.nationality === y) ? this.push(x.nationality) : false;
            }, new Array()).map(x => x.nationality).map(function (x)
            {
                const o = {};
                o[x] = {};
                o[x].peoples = a.peoples.filter(y => y.nationality === x).map(function (y)
                {
                    return {
                        name: y.name
                    };
                });
                return o;
            }).reduce((a, c) =>
            {
                a[Object.keys(c)[0]] = c[Object.keys(c)[0]];
                return a;
            },
            {})
        };
        
        const c = JSON.stringify(b); /* = {
        	"nationality":
        	{
        		"Italian":
        		{
        			"peoples": [
        			{
        				"name": "Alain"
        			}]
        		},
        		"French":
        		{
        			"peoples": [
        			{
        				"name": "John"
        			},
        			{
        				"name": "FOO"
        			}]
        		}
        	}
        } */

        -
        Edité par BrainError 4 décembre 2019 à 23:16:39

        • Partager sur Facebook
        • Partager sur Twitter
          5 décembre 2019 à 12:10:02

          Merci beaucoup BrainError pour ta proposition elle me convient très bien, est-ce que quelqu'un connaîtrais un moyen plus rapide à l'aide de Lodash ou d'un autre module pour effectuer cette transformation ?

          -
          Edité par MattèoGauthier 5 décembre 2019 à 12:10:12

          • Partager sur Facebook
          • Partager sur Twitter

          Comment changer l'organization d'un objet

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown