Estoy accediendo a los valores de un objeto dentro de una matriz dentro de un objeto. A continuación se muestra el formato de los datos:
[{ "id": "99a4e6ef-68b0-4cdc-8f2f-d0337290a9be", "stock_name": "Just Energy Group, Inc.", "shareholders": [{ "userId": "e9328bb2-81ac-4e86-9ec8-520b1909cc9b", "number_of_shares": 266 }, { "userId": "d42ff6a6-9b2f-4561-ac2e-0cf2bb170430", "number_of_shares": 389 }] }]A continuación se muestra mi código para obtener datos de github usando axios e imprimir la identificación del usuario:
const axios = require('axios') require("util").inspect.defaultOptions.depth = null; async function getStocks(){ const { data } = await axios.get('https://gist.githubusercontent.com/graffixnyc/8c363d85e61863ac044097c0d199dbcc/raw/7d79752a9342ac97e4953bce23db0388a39642bf/stocks.json') return data // this will be the array of people objects } async function listShareholders() { let c=[] let a = await getStocks(); for(i=0;i<a.length;i++){ for(j=0;j<a[i].shareholders;j++) c.push((a[i].shareholders[j].userId)) } return c } async function bc(){ const address = await listShareholders() console.log(address) } bc()No estoy seguro de por qué no obtengo ningún resultado.
Estoy editando para incluir el código de la respuesta original (no publicada por mí) que desapareció
En for(j=0;j<a[i].shareholders;j++) está comparando un number con un Array . Este es el código adecuado:
for(i=0;i<a.length;i++){ for(j=0; j < a[i].shareholders.length; j++) c.push((a[i].shareholders[j].userId); } Como se señaló en for(j=0;j<a[i].shareholders;j++) está comparando un number con un Array .
La solución propuesta funciona, pero ten en cuenta que puedes hacerlo en una sola línea:
const c = a.flatMap(obj => obj.shareholders.map(s => s.userId));