javascript - 递归函数+数组意外行为的串联
问题描述
这不是一个需要解决方案的技术问题,但更多的是我想要对 JavaScript 和递归函数有更好的技术理解。
我编写了一个递归函数来调用 API 来获取所有记录,直到没有记录可供获取。
下面是它的基本工作形式。这将返回数组中预期的记录数。
async function getRecords(page, recordsArray) {
const records = await <axios api call>
const moreRecords = records.more_records
if(!moreRecords) {
return recordsArray.concat(records.data)
} else {
return await getRecords(page + 1, recordsArray.concat(records.data))
}
}
然而,当我最初编写这个函数时,我像下面的那样做了,它没有返回预期的记录数,我真的不明白为什么。我预计会的。
async function getRecords(page, recordsArray) {
const records = await <axios api call>
const moreRecords = records.more_records
if(!moreRecords) {
recordsArray.concat(records.data)
return recordsArray
} else {
return await getRecords(page + 1, recordsArray.concat(records.data))
}
}
问题
为什么第二个没有返回预期的记录数,而第一个却返回了?
解决方案
concat
不修改现有数组;相反,它返回一个新数组。
const arr = [1, 2, 3];
const newArr = arr.concat([4, 5]);
console.log(arr);
console.log(newArr);
如果您想调整第二个片段以使其工作,而不使用第一个片段,请将项目从 推records.data
送到 ,recordsArray
以便原始数组在返回时包含新项目:
if(!moreRecords) {
recordsArray.push(...records.data)
return recordsArray
} else {
推荐阅读
- scala - Scala 理解中的类型不匹配
- angular - 从 API 使用 Angular Google Maps 创建多个标记
- jquery - 从 DataTables-Table 中获取 ID
- powershell - 如果作业的状态为已完成,则在 powershell 中执行代码
- php - Stripe 与 Auth 和 Capture 连接,在 PHP 中检索 Charge
- java - java.io.IOException 使用 Avro 工具将 JSON 转换为 Avro 后不是数据文件
- css - 将图标添加到离子选项选择
- reactjs - 为 react typescript 项目设置 ts-jest
- javascript - 如何在日期选择器中选择迷你日期(4 月 1 日)财务日期
- javascript - 如何从数组中动态删除并返回两个项目?