【问题标题】:Return last item first in a recursive function在递归函数中首先返回最后一项
【发布时间】:2018-04-11 18:38:31
【问题描述】:

我需要一个递归函数,它首先返回最深的项目,因为反转数组和推到第一个位置很慢。

我有一个对象:

const myObject = {
    id: 3,
    parent: {
        id: 2,
        parent: {
            id: 1,
            parent: null,
        },
    },
};

还有一个递归函数:

function findParents(myObject, parents = []) {
  if (myObject.parent) {
    parents.push(myObject.parent.id);
    return findParents(myObject.parent, parents);
  }

  return parents; // [2, 1]
}

我需要一个递归函数,它返回一个对象父 ID 的数组,以便最后一个父对象在返回的数组中排在第一位。所以对于上面的例子,如果我将该对象传递给我的函数,它应该像这样返回父母的 id:

[1, 2]

【问题讨论】:

  • 为什么不直接弹出数组?
  • 好吧,如果你有将正常顺序推入数组的算法,你可以使用array.unshift 而不是array.push。 Unshift 将它们推到前面。
  • 换句话说,只要把这个parents.push(myObject.parent.id);改成parents.unshift(myObject.parent.id);
  • 但是你的名单有多大?这可能无关紧要。当需要 0.01 秒而不是 0.001 秒时,慢 10 倍是难以察觉的。
  • @user3743266 当我第一次发布我的答案时,它是错误的。我现在改了

标签: javascript arrays function recursion


【解决方案1】:
function findParents(myObject, parents = []) {
  if (myObject.parent) {
    parents = findParents(myObject.parent, parents);
  }
  parents.push(myObject.id)
  return parents; // [2, 1]
}

【讨论】:

  • 返回 [1]
  • 谢谢,这是一个简单的逻辑错误,我想不通。另外,为什么人们会无缘无故地随机投票?我认为我的问题很清楚
猜你喜欢
  • 2019-01-12
  • 2014-12-06
  • 2021-12-31
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-29
相关资源
最近更新 更多