-2

我有以下数组:

[{text: "a", depth: 0},
 {text: "b", depth: 1},
 {text: "c", depth: 2},
 {text: "d", depth: 1}]

我要解决的问题是采用扁平数组(上图)并根据每个元素的深度创建嵌套结构。我需要它嵌套的原因是递归地构建一个列表(有序或无序),我无法使用我拥有的数组。

以下以某种方式,塑造或形成所需的输出。我试图创建的嵌套结构的总体思路应该更清晰。

  { 
    text: "a", 
    depth: 0,
    sublevel: [
      {
        text: "a",
        depth: 1,
        sublevel: [
          {
            text: "b",
            depth: 2,
            sublevel: []
          }
        ]
      },
      {
        text: "d",
        depth: 1,
        sublevel: []
      }
    ]
  }
4

1 回答 1

0

我想到了。

new_structure = []
depth = 0
array.each do |element|
  if element[:depth] == 0
    new_structure << element
  else
    if element[:depth] < depth || element[:depth] == depth
      parent = recursive_method(new_structure[-1], element[:depth] - 1)[:sublevel]
      parent = [] if parent.nil?
      parent << element
    else
      recursive_method(new_structure[-1], element[:depth]).merge!({ sublevel: [element] })
    end
  end
  depth = element[:depth]
end

def recursive_method(structure, depth)
  return structure if structure[:sublevel].nil? || depth == 0
  recursive_method(structure[:sublevel][-1], depth -= 1)
end

结果:

[
  {
    :text => "a",
    :depth => 0,
    :sublevel => [
        {
            :text => "b",
            :depth => 1,
            :sublevel => [
                {
                    :text => "c",
                    :depth => 2
                }
            ]
        }, 
        {
            :text => "d",
            :depth => 1
        }
    ]
  }
]

打开让它变得更好。

于 2018-03-01T18:47:42.273 回答