ruby 如何将整数数组Map为具有键和值格式?

syqv5f0l  于 2023-04-20  发布在  Ruby
关注(0)|答案(3)|浏览(113)

具有以下示例输入:

{
    "array": [
        {
            "userId": 1203746,
            "leadContactVids": [
                68310280,
                68310253
            ]
        }
    ]
}

我正在尝试将其转换为以下格式:

{
    "updatedArray": [
        {
            "userId": 1203746,
            "leadContactVids": [
                {
                "id": 68310280,
                "id": 68310253
                                }
            ]
        }
    ]
}

我尝试使用下面的ruby代码,但它返回的是初始格式,而不是包含键“id”的格式:

updatedArray= array.each do |entry|
    qlIds = entry.dig(:leadContactVids)&.map { |item| {id: item} }
    entry.merge({
      leadContactVids: qlIds
    })
end

我不知道我错过了什么,所以我很感激一些帮助!

nnt7mjpx

nnt7mjpx1#

我将从现有数组创建新数组,并将其数据格式替换为'Array#map',以获得预期的新格式:

input = {
  "array": [
    {
      "userId": 1203746,
      "leadContactVids": [68310280, 68310253]
    }
  ]
}

output = {
  updatedArray: input[:array].map { |elem| 
    {
      userId: elem[:userId],
      leadContactVids: elem[:leadContactVids].map { |id| { id: id } }
    }
  }
}
#=> {:updatedArray=>[{:userId=>1203746, :leadContactVids=>[{:id=>68310280}, {:id=>68310253}]}]}
cbwuti44

cbwuti442#

正如@spickermann所说,你应该使用#map来获取返回值,而不是#each,因为“array”对象没有被改变:

设置

array = [
  {
    "userId": 1203746,
    "leadContactVids": [
      68310280, 68310253
    ]
  }
]
 => [{:userId=>1203746, :leadContactVids=>[68310280, 68310253]}]

固定编码

updatedArray= array.map do |entry|
  qlIds = entry.dig(:leadContactVids)&.map { |item| {id: item} }
  entry.merge({
      leadContactVids: qlIds
      })
end
 => [{:userId=>1203746, :leadContactVids=>[{:id=>68310280}, {:id=>68310253}]}]
zphenhs4

zphenhs43#

我们得到以下哈希。

h = {
  "array": [
    {
      "userId": 1203746,
      "leadContactVids": [
        68310280,
        68310253
      ]
    }
  ]
}

可以如下获得期望的散列。

{ updatedArray: [
    h[:array].first.transform_values do |v|
      case v
      when Array
        v.map { |n| { id: n } }
      else
        v
      end
    end
  ]
}
  #=> {
  #     :updatedArray=>[
  #       {
  #         :userId=>1203746,
  #         :leadContactVids=>[
  #           {:id=>68310280},
  #           {:id=>68310253}
  #         ]
  #       }
  #     ]
  #   }

我假设这是你想要的结果。请参阅Hash#transform_values。原始哈希没有发生变化。

相关问题