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
5 Réponses :
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));
const transformedTest = test.reduce((pv, result) => ({...pv, [result.ad_id]: { abc: result.abc } }), {});
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);
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);
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 })
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.