[Noob to Javascript and React] J'utilise une API qui renvoie un objet avec des valeurs comme celle-ci. AAPL, AMZN, FB, GOOGL, peuvent être n'importe quoi basé sur l'entrée du tableau de chaînes de la fonction.

{
        AAPL: { price: 329.99 },
        AMZN: { price: 2563.05 },
        FB: { price: 239.93 },
        GOOGL: { price: 1469.12 }
}

Comment pourrais-je envisager de mapper dynamiquement une réponse comme celle-ci dans un objet d'état comme celui-ci? La propriété id n'existe pas, elle doit être créée.

state = {
 stocks: [ { id: 1, name: 'AAPL', price: 329.99 }, { id: 2, name: 'AMZN', price: 2563.05 }, ...]
}

Je suis capable d'imprimer avec succès les noms d'actions et leurs prix séparément, mais j'ai du mal à comprendre comment je pourrais les câbler dans un objet d'état comme ce qui précède.

    function getCurrentPriceOfBatchStocks(_stocks) {
        iex
            .symbols(_stocks)
            .price()
            .then(res => {
                console.log(typeof res);
                console.log(res);
                console.log(Object.keys(res));
                console.log(Object.values(res));
            });
    }
0
Ian Smith 2 juin 2020 à 19:10

3 réponses

Meilleure réponse

Voici une implémentation. Avec Object.entries, vous obtenez un tableau avec un tableau de [clé, valeur] de votre objet d'origine. Et vous pouvez mapper ce tableau à un format différent.

Vous pouvez vérifier le résultat avec le bouton Run code snippet.

let st = {
    AAPL: { price: 329.99 },
    AMZN: { price: 2563.05 },
    FB: { price: 239.93 },
    GOOGL: { price: 1469.12 }
}

let stocks = Object.entries(st).map(([key, value], index) => ({id: index + 1, name: key, price: value.price}))

console.log(stocks)
0
Peter Ambruzs 2 juin 2020 à 16:23

Je ne sais pas d'où vous obtenez l'identifiant, alors j'utilise idx comme exemple.

const stocks = Object.keys(resp).map((key, idx) => ({ id: idx + 1, name: key, price: resp[key] }))
1
Eugene 2 juin 2020 à 16:19
const res={
        AAPL: { price: 329.99 },
        AMZN: { price: 2563.05 },
        FB: { price: 239.93 },
        GOOGL: { price: 1469.12 }
}

console.log(Object.entries(res).map((entry,index)=>{
return {
  id:index+1,
  name:entry[0],
...entry[1]
  }
}));
0
Prakash Reddy Potlapadu 2 juin 2020 à 16:24