我有一個嵌套模型,並希望做一些基本的管道。我的最終目標是消除任何嵌套的地圖,id == ""
爲以下PARAMS:elixir管道,如果新變量可以管道,如果直接向管道發送不能管道,爲什麼?
params = %{"name" => "OuterModelName", "InnerModel" => %{"0" => %{"id" => "2"}, "1" => %{"id" => "3"}, "2" => %{"id" => ""}}}
要刪除id ==""
以下管道工程:
blanksRemoved =
params
|> Map.update! "InnerModel", fn(innerMap) ->
Enum.filter(innerMap,fn{k,v} -> byte_size(v["id"]) !=0 end) end
blanksRemoved現在是:
%{"name" => "OuterModelName", "InnerModel" => [{"0", %{"id" => "2"}}, {"1", %{"id" => "3"}}]}
注意innerModel成爲一個數組,所以我需要d將該數組轉換回結構。
asStruct =
blanksRemoved |> Map.update! "InnerModel", fn(innerMap) ->
Enum.into(innerMap,%{}) end
這按預期工作,我得到:
%{"name" => "OuterModelName", "InnerModel" => %{"0" => %{"id" => "2"}, "1" => %{"id" => "3"}}}
然而,當我試圖簡單地將兩個管道與管道下方結合,我得到一個錯誤。
combinedPipes =
params
|> Map.update! "InnerModel", fn(innerMap) ->
Enum.filter(innerMap,fn{k,v} -> byte_size(v["id"]) !=0 end) end
|> Map.update! "InnerModel", fn(innerMap) ->
Enum.into(innerMap,%{}) end
和錯誤:
argument error
(stdlib) :maps.find("InnerModel", #Function<2.64012156
我知道錯誤是因爲它無法找到「InnerModel」,但我不知道爲什麼它不能發現,當它工作時,我分開管道。有人能告訴我這裏發生了什麼事嗎?
更詳細的解釋記住,'[{ 「0」 時,%{ 「ID」=> 「2」}},{ 「1」,%{ 「id」=>「3」}}]'表示一個列表,而不是一個數組;差別不是微不足道的。 –