Hi, I need your suggestion to improve my code. I need to get user dynamic form outputs and convert it to map.
my user inputs:
%{
"_csrf_token" => "CODE",
"input-name-1" => "filed1",
"input-name-2" => "field",
"input-name-3" => "field2",
"input-value-1" => "value1",
"input-value-2" => "",
"input-value-3" => "value2",
"setting" => %{"section" => "public"}
}
then I convert this to a map with this way:
user_fields = Map.to_list(full_params)
|> Enum.filter(fn {key, _value} -> String.slice(key, 0..5) == "input-" end)
Enum.map(user_fields, fn {key, field_name} ->
if String.slice(key, 0..10) == "input-name-" do
["input", "name", number] = String.split(key, "-")
{_value_key, value_value} = Enum.find(user_fields, fn {user_key, _user_value} -> user_key == "input-value-#{number}" end)
{field_name, value_value}
end
end)
|> Enum.reject(&is_nil/1)
|> Enum.reject(fn {key, value} -> key == "" or value == "" end)
|> Map.new
|> IO.inspect()
and final out puts are like this:
%{"field2" => "value2", "filed1" => "value1"}
Is there a shorter way?
By the way, I couldn’t create a pattern which uses
<>
binary instead ofString.slice
.
Thanks