2
votes

Transformation d'objet Javascript

J'utilise la carte pour transformer le JSON. Au lieu d'un objet unique, j'obtiens un tableau de données. Snipt illustré ci-dessous.

J'essaie de suivre JSON

const test = [{ id: 'ddec9c7f-95aa-4d07-a45a-dcdea96309a9',
  ad_id: 'test1',
  country: 'ID',
  abc: { size: 'big', id: '1' },
},
{ id: 'ddec9c7f-95aa-4d07-a45a-dcdea96309a9',
  ad_id: 'test2',
  country: 'ID',
  abc: { size: 'small', id: '2' },
},
];
const transformedTest = test.map(result =>
  ({ [result.ad_id]: { abc: result.abc } }));

const data = { data: transformedTest };
console.log(JSON.stringify(data));

Mais de suivre JSON

{
"data": [{
    "test1": {
        "abc": {
            "size": "big",
            "id": "1"
        }
    }
}, {
    "test2": {
        "abc": {
            "size": "big",
            "id": "2"
        }
    }
}]

}

Voici mon code.

{
  "data": {
    "test1": {
        "abc": {
            "size": "big",
            "id": "1"
        }
    },
    "test2": {
        "abc": {
            "size": "small",
            "id": "2"
        }
    }
  }
}

Toute aide sera appréciée


2 commentaires

Array.prototype.map


La méthode map () crée un nouveau tableau avec les résultats de l'appel d'une fonction fournie sur chaque élément du tableau appelant.


5 Réponses :


1
votes

La fonction map renvoie un tableau plutôt qu'un objet clé-valeur spécifique, une alternative consiste à utiliser la fonction réduire pour construire le sortie.

.as-console-wrapper { min-height: 100%; }
const test = [{ id: 'ddec9c7f-95aa-4d07-a45a-dcdea96309a9',  ad_id: 'test1',  country: 'ID',  abc: { size: 'big', id: '1' },},{ id: 'ddec9c7f-95aa-4d07-a45a-dcdea96309a9',  ad_id: 'test2',  country: 'ID',  abc: { size: 'big', id: '2' },}],
      data = { data: test.reduce((a, result) =>
        ({...a, [result.ad_id]: { abc: result.abc } }), Object.create(null))};

console.log(JSON.stringify(data, null, 2));


0 commentaires

2
votes
const transformedTest = test.reduce((pv, result) =>
({...pv, [result.ad_id]: { abc: result.abc } }), {});

0 commentaires

5
votes

Essayez ceci:

const test =  [
  {
    "id": "ddec9c7f-95aa-4d07-a45a-dcdea96309a9",
    "ad_id": "test1",
    "country": "ID",
    "abc": {
      "size": "big",
      "id": "1"
    }
  },
  {
    "id": "ddec9c7f-95aa-4d07-a45a-dcdea96309a9",
    "ad_id": "test2",
    "country": "ID",
    "abc": {
      "size": "big",
      "id": "2"
    }
  }
];
const result  = test.reduce((acc,{ad_id, abc})=> (acc.data[ad_id] = {abc}, acc),{data:{}}) 

console.log(result);


0 commentaires

2
votes

Vous pouvez prendre un Object .fromEntries et mappez de nouvelles paires clé / valeur et récupérez-en un nouvel objet.

const
    test = [{ id: 'ddec9c7f-95aa-4d07-a45a-dcdea96309a9', ad_id: 'test1', country: 'ID', abc: { size: 'big', id: '1' } }, { id: 'ddec9c7f-95aa-4d07-a45a-dcdea96309a9', ad_id: 'test2', country: 'ID', abc: { size: 'small', id: '2' } }];
    transformedTest = Object.fromEntries(test.map(({ ad_id, abc} ) => [ad_id, { abc }]));
    data = { data: transformedTest };

console.log(data);


0 commentaires

2
votes

Parcourez le tableau en utilisant un simple for ... of boucle et créez un objet data . Utilisez Noms de propriété abrégés pour créer l'imbrication abc :

.as-console-wrapper { min-height: 100%; }
const test=[{id:'ddec9c7f-95aa-4d07-a45a-dcdea96309a9',ad_id:'test1',country:'ID',abc:{size:'big',id:'1'},},{id:'ddec9c7f-95aa-4d07-a45a-dcdea96309a9',ad_id:'test2',country:'ID',abc:{size:'small',id:'2'}}]
const data = {}

for(const { ad_id, abc } of test) {
  data[ad_id] = { abc }
}

console.log({ data })


0 commentaires