递归函数如何将消息保存在数组中?

时间:2019-04-20 14:13:02

标签: javascript arrays reactjs recursion

我创建了递归函数,该函数对嵌套对象进行排序,并根据某些属性从中获取消息。最后,我想获得一个包含消息的数组,但是当函数对其自身进行迭代时,它将重写旧的array。如何在不丢失previos消息的情况下继续将消息推送到数组并返回该数组

我试图在jsfidle中重现我的代码,但是我的递归函数只运行一次。无论如何,如果您需要我正在使用的对象,这里是一个链接https://jsfiddle.net/armakarma/hvj62una/1/

  getMessageFromStage(data, algoritmID, stageIDS) {
    let stage = data[algoritmID][stageIDS]
    let result = []
    let nextStageId = null
    let nextAlgId = null

    // here i'm pushing messages to result array

    if (stage.messages.length) {
      for (let i = 0; i < stage.messages.length; i++) {
        if (stage.messages[i].message_type === "text") {
          result.push(stage.messages[i].message)
        }
      }
    }
    if (stage.render === true) {
      nextStageId = stage.stageID
    } else {
      nextStageId = 1
    }
    if (stage.algoritm_id) {
      nextAlgId = stage.algoritm_id
    } else {
      nextAlgId = algoritmID
    }

    if (nextStageId && nextAlgId && stage.render) {
      this.getMessageFromStage(data, nextAlgId, nextStageId)
    }
  }

1 个答案:

答案 0 :(得分:2)

至少两个解决方案。

  1. 创建一个外部函数,该函数声明~/Documents/Charles/并首次调用results
getMessageFromStage
  1. myFun(data, algoritmID, stageIDS) { const results = []; this.getMessageFromStage(data, algoritmID, stageIDS); return results; } 设置另一个results的可选参数,并将其与每个递归调用一起传递。
getMessageFromStage