对代码数组进行分组

时间:2017-04-06 08:51:48

标签: ruby-on-rails ruby-on-rails-5

我有两种不同类型的<select>

codes

我需要形成这种格式的数组。

AllCodes = [
  {
    group_name: 'Marked',
    group_codes: [
      {
        code: '1A',
        description: 'Marked.'
      }
    ],
    .. //next group codes.
  }
 ]

AllCodes = [
  {
    code: '2',
    description: 'Located. Facilities Marked.'
  }
  .. //next codes.
]

我是这样做的,但我真的不喜欢这种方法,我怎么能干掉代码?

[
  {
    code: '1A',
    description: 'example'
  },
  .. // next code
]

1 个答案:

答案 0 :(得分:1)

# obj is an each element of your AllCodes array

codes = AllCodes.inject([]) do |codes_array, obj|
  if obj.has_key?(:group_codes)
    codes_array += obj[:group_codes]
  else
    codes_array << obj
  end
end

codes_array是一个注入的数组。迭代AllCodes,如果是当前对象has_key?(:group_codes),我们应该obj[:group_codes](因为它已经是所需格式的数组),所以我们合并了codes_array用它:codes_array += obj[:group_codes]。如果它没有该密钥,那么它已经是所需格式的哈希值。所以我们只需将此元素添加到数组中。