FWIW, the example below constructs a new StructArray:
using StructArrays: components
sa = StructArray(a=Vector{Any}(rand(5)), b=Vector{Any}(rand(5)))
sb = StructArray(NamedTuple{fieldnames(eltype(sa))}(identity.(c) for c in values(components(sa))))
julia> using StructArrays, AccessorsExtra
julia> A = StructArray(a=Vector{Any}(rand(5)), b=Vector{Any}(rand(5)) )
5-element StructArray(::Vector{Any}, ::Vector{Any}) with eltype @NamedTuple{a, b}:
@NamedTuple{a, b}((0.6630158704139273, 0.2264759648412541))
@NamedTuple{a, b}((0.5410353524881278, 0.8091409548463714))
@NamedTuple{a, b}((0.11891843722732054, 0.7064689641168419))
@NamedTuple{a, b}((0.43124228839812506, 0.8170026667989915))
@NamedTuple{a, b}((0.29525834661985517, 0.3913670009707778))
julia> B = @modify(identity, A[∗ₚ][∗]) # or A |> Properties() |> Elements() if you like more verbose
5-element StructArray(::Vector{Float64}, ::Vector{Float64}) with eltype @NamedTuple{a::Float64, b::Float64}:
(a = 0.6630158704139273, b = 0.2264759648412541)
(a = 0.5410353524881278, b = 0.8091409548463714)
(a = 0.11891843722732054, b = 0.7064689641168419)
(a = 0.43124228839812506, b = 0.8170026667989915)
(a = 0.29525834661985517, b = 0.3913670009707778)