javascript - 无法循环通过 node.js 中的嵌套对象
问题描述
我正在尝试遍历嵌套对象并将数据保存到我的云 Firestore 数据库,但它不工作,
这是我从 API 调用中检索到的对象的结构,
{
"count": 133,
"filters": {
"dateFrom": "2021-04-12",
"dateTo": "2021-04-22",
"permission": "TIER_ONE"
},
"matches": [
{
"id": 304061,
"competition": {
"id": 2021,
"name": "Premier League",
"area": {
"name": "England",
"code": "ENG",
"ensignUrl": "https://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg"
}
},
"season": {
"id": 619,
"startDate": "2020-09-12",
"endDate": "2021-05-23",
"currentMatchday": 31,
"winner": null
},
"utcDate": "2021-04-12T17:00:00Z",
"status": "SCHEDULED",
"matchday": 31,
"stage": "REGULAR_SEASON",
"group": "Regular Season",
"lastUpdated": "2021-04-12T16:51:35Z",
"odds": {
"homeWin": 3.43,
"draw": 3.31,
"awayWin": 2.15
},
"score": {
"winner": null,
"duration": "REGULAR",
"fullTime": {
"homeTeam": null,
"awayTeam": null
},
"halfTime": {
"homeTeam": null,
"awayTeam": null
},
"extraTime": {
"homeTeam": null,
"awayTeam": null
},
"penalties": {
"homeTeam": null,
"awayTeam": null
}
},
"homeTeam": {
"id": 74,
"name": "West Bromwich Albion FC"
},
"awayTeam": {
"id": 340,
"name": "Southampton FC"
},
"referees": [
{
"id": 11430,
"name": "Simon Hooper",
"role": "MAIN_REFEREE",
"nationality": "England"
},
{
"id": 11570,
"name": "Harry Lennard",
"role": "ASSISTANT_N1",
"nationality": "England"
},
{
"id": 11505,
"name": "Derek Eaton",
"role": "ASSISTANT_N2",
"nationality": "England"
},
{
"id": 11585,
"name": "Craig Pawson",
"role": "FOURTH_OFFICIAL",
"nationality": "England"
},
{
"id": 11487,
"name": "Kevin Friend",
"role": "VIDEO_ASSISTANT_REFEREE",
"nationality": "England"
}
]
},
{
"id": 303253,
"competition": {
"id": 2002,
"name": "Bundesliga",
"area": {
"name": "Germany",
"code": "DEU",
"ensignUrl": "https://upload.wikimedia.org/wikipedia/commons/b/ba/Flag_of_Germany.svg"
}
},
"season": {
"id": 599,
"startDate": "2020-09-18",
"endDate": "2021-05-15",
"currentMatchday": 28,
"winner": null
},
"utcDate": "2021-04-12T18:30:00Z",
"status": "SCHEDULED",
"matchday": 28,
"stage": "REGULAR_SEASON",
"group": "Regular Season",
"lastUpdated": "2021-04-12T14:42:35Z",
"odds": {
"homeWin": 2.8,
"draw": 3.72,
"awayWin": 2.36
},
"score": {
"winner": null,
"duration": "REGULAR",
"fullTime": {
"homeTeam": null,
"awayTeam": null
},
"halfTime": {
"homeTeam": null,
"awayTeam": null
},
"extraTime": {
"homeTeam": null,
"awayTeam": null
},
"penalties": {
"homeTeam": null,
"awayTeam": null
}
},
"homeTeam": {
"id": 2,
"name": "TSG 1899 Hoffenheim"
},
"awayTeam": {
"id": 3,
"name": "Bayer 04 Leverkusen"
},
"referees": []
}]}
这是我尝试循环遍历对象的匹配部分,我希望能够遍历每个匹配项,同时仍然能够在每次迭代中访问子对象并在我的云 Firestore 数据库中设置数据
axios.request(options).then(function(response) {
//console.log(typeof response); // check the type of response returning already in JSON format
//console.log(response); // check the response object and based on key/values process it
const data = response.data; // if resp contains the data you will get it here.
//console.log(response.data);
/* for (let data1 in data.pagination) {
// from the sample response you shared in the question
console.log(data1) // prints the keys
console.log(data.pagination.data1) // prints the values*/
for (i = 0; i < data.count; i++) {
// from the sample response you shared in the question
// console.log(index);
// console.log(data.f[data1]) // prints the keys
// //console.log(data.pagination.data1) // prints the values
const soccerData = {
name: `${data.matches[i].competition.name}`,
id: `${data.matches[i].competition.id}`
};
return db.collection('matches').doc(`${data.matches[i].id}`)
.set(soccerData).then(() =>
console.log('data written to database'));
}
}).catch(function(error) {
console.error(error);
});
解决方案
要循环匹配使用:
response.data.matches.forEach(match => {
// do something with the match
}
)
而不是 for 循环。然后你可以做
const soccerData = {
name: `${match.competition.name}`,
id: `${match.competition.id}`
}
并且:
return db.collection('matches').doc(`${match.id}`)
.set(soccerData).then(() =>
console.log('data written to database'));
推荐阅读
- c++ - 错误:在 return 语句中没有用于调用 ... 的匹配函数
- java - Gnome - 主菜单,Freemind,如何将 java 内存设置添加到现有条目?
- xamarin.forms - Xamarin 表单生命周期
- microsoft-graph-api - 检索用户日历时出现 Microsoft Graph API 未知错误 - 客户端凭据流
- git - 笔记本电脑在 git 合并之间关闭
- html - 如何将页脚放在页面末尾?
- apache-kafka - 使用 KafkaPublish 处理器写入 kafka 主题时发送 SSL 关闭消息失败
- c# - 使用相同的表单进行插入和编辑,而在 c# 中没有未使用的变量
- haskell - 使用新的派生功能扩展 GHC 的最简单方法是什么?
- typo3 - TYPO3 为控制器操作设置模板视图