Как создать для каждого цикла в javascript

#javascript

#javascript

Вопрос:

У меня есть данные json, подобные этому:

 {
    "s:Envelope": {
        "s:Body": {
            "ExecuteSnapshotRequestsResponse": {
                "ExecuteSnapshotRequestsResult": {
                    "a:SnapshotResponseItemBase": [
                        {
                            "a:AdditionalDetails": {},
                            "a:Error": {},
                            "a:Tag": {
                                "_text": "0~##~vod~##~PI,DY,MV"
                            },
                            "a:Instrument": {
                                "_text": "vod"
                            },
                            "a:InstrumentDisplay": {},
                            "a:Currency": {
                                "_text": "£ "
                            },
                            "a:DataTypeValues": {
                                "a:DataTypeResponseValueBase": [
                                    {
                                        "a:DataType": {
                                            "_text": "PI"
                                        },
                                        "a:DataTypeDisplayName": {
                                            "_text": "PRICE INDEX"
                                        },
                                        "a:Value": {
                                            "_text": "1238.4"
                                        }
                                    },
                                    {
                                        "a:DataType": {
                                            "_text": "DY"
                                        },
                                        "a:DataTypeDisplayName": {
                                            "_text": "DIVIDEND YIELD"
                                        },
                                        "a:Value": {
                                            "_text": "9.25"
                                        }
                                    },
                                    {
                                        "a:DataType": {
                                            "_text": "MV"
                                        },
                                        "a:DataTypeDisplayName": {
                                            "_text": "MARKET VALUE"
                                        },
                                        "a:Value": {
                                            "_text": "38823.49"
                                        }
                                    }
                                ]
                            },
                            "a:Date": {
                                "_text": "2019-04-17T00:00:00"
                            }
                        },
                        {
                            "a:AdditionalDetails": {},
                            "a:Error": {},
                            "a:Tag": {
                                "_text": "0~##~@AAPL~##~PI,DY,MV"
                            },
                            "a:Instrument": {
                                "_text": "@AAPL"
                            },
                            "a:InstrumentDisplay": {},
                            "a:Currency": {
                                "_text": "U$"
                            },
                            "a:DataTypeValues": {
                                "a:DataTypeResponseValueBase": [
                                    {
                                        "a:DataType": {
                                            "_text": "PI"
                                        },
                                        "a:DataTypeDisplayName": {
                                            "_text": "PRICE INDEX"
                                        },
                                        "a:Value": {
                                            "_text": "39566.2"
                                        }
                                    },
                                    {
                                        "a:DataType": {
                                            "_text": "DY"
                                        },
                                        "a:DataTypeDisplayName": {
                                            "_text": "DIVIDEND YIELD"
                                        },
                                        "a:Value": {
                                            "_text": "1.44"
                                        }
                                    },
                                    {
                                        "a:DataType": {
                                            "_text": "MV"
                                        },
                                        "a:DataTypeDisplayName": {
                                            "_text": "MARKET VALUE"
                                        },
                                        "a:Value": {
                                            "_text": "957814.5"
                                        }
                                    }
                                ]
                            },
                            "a:Date": {
                                "_text": "2019-04-17T00:00:00"
                            }
                        }
                    ]
                }
            }
        }
    }
}
  

Я хотел бы получить вывод, подобный этому:

 [['vod','1238.4','9.25','38823.49'],['@AAPL','39566.2','1.44','957814.5']]
  

Я пробовал это, но я получаю вывод только в одном массиве:

пусть arr = [];

 totalRows.forEach(v => {
    arr.push(v["a:Instrument"]["_text"]);
    v["a:DataTypeValues"]["a:DataTypeResponseValueBase"].map((e, i) => {
        arr.push(e["a:Value"]["_text"]);
    });
});
  

но я хочу несколько массивов для каждого a:SnapshotResponseItemBase и получить a:Instrument и a:Value

Обновить:

Я исправил это следующим образом, но можно ли это оптимизировать?

 let arr = [];
for (var i = 0; i < totalRowsCount; i  ) {
    arr.push(totalRows[i]["a:Instrument"]["_text"]);
    for (var j = 0; j < totalRows[i]["a:DataTypeValues"]["a:DataTypeResponseValueBase"].length; j  ) {
        arr.push(totalRows[i]["a:DataTypeValues"]["a:DataTypeResponseValueBase"][j]["a:Value"]["_text"]);
    }
}
  

Комментарии:

1. Кроме того, почему вы хотите, чтобы это был массив массивов, а не словарь массивов, где ключом является vod или @AAPL , а значениями являются числа.

2. arr.push(...v["a:DataTypeValues"]["a:DataTypeResponseValueBase"].map( e => e["a:Value"]["_text"]))

3. @stackErr вот как существующее приложение понимает данные

Ответ №1:

 const arr = totalRows
  .map(el => [
    el['a:Instrument']._text,
    ...el['a:DataTypeValues']['a:DataTypeResponseValueBase']
      .map(e => e['a:Value']._text)
   ]);
  

Ответ №2:

Попробуйте это, приятель

 arr = totalRows.map(element => {
    let one = element["a:Instrument"]["_text"];
    let two = element["a:DataTypeValues"]["a:DataTypeResponseValueBase"].map(subArrayElement => {
        return subArrayElement["a:Value"]["_text"];
    })
    return [...one, ...two];
})
console.log(arr);