如何在JavaScript中为每个循环创建

时间:2019-04-25 03:10:17

标签: 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']]

我尝试了这个,但是我只在单个数组中得到输出:

let 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:Instrumenta: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"]);
    }
}

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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);