优化:通过索引从扁平递归结构中查找

时间:2015-12-02 17:19:46

标签: javascript recursion data-structures

假设我的结构如下所示。

[{
  name: 'Prepare the ingredients',
  steps: [{
    name: 'Cut tomatoes',
    steps: [{
      name: 'Peel tomatoes',
    }, {
      name: 'Dice tomatoes',
    }]
  }]
}, {
  name: 'Sautee vegetables',
  steps: [{
    name: 'Put two table spoons of olive oil in pan',
  }]
}]

我将current的引用存储在数据库中,并在每一步中递增它。

第一个步骤被定义为找不到子项的第一步。在这种情况下,它将是{ name: 'Peel tomatoes' }。下一步是{ name: 'Dice Tomatoes' }

我找不到按索引查找的方法有点麻烦。我发现管理它的唯一方法是展平整个结构然后获取索引。我想返回步骤并引用它的父元素。

_flatten(steps, parent) {
  for (let index=0; index<steps.length; index++) {
    if (steps[index].steps instanceof Array) {
      this.steps.push(this._flatten(steps[index].steps, steps[index]));
    }
    this.steps.push(new Step(steps[index], parent));
  }
}
let data = Schedule.findOne({}, { sort: { createdAt: -1 } })  // most recent schedule.
_flatten(data.steps)[data.metadata.steps.current];

有没有合适的方法来优化它,而不是在每次搜索时展平整个结构?

1 个答案:

答案 0 :(得分:1)

只使用嵌套引用,即索引数组。你可以用它来平凡地遍历你的结构,也可以做增量,而不需要弄平整个事物。