从地图上动态删除键值对

时间:2018-08-17 14:42:26

标签: elixir

我将此地图存储在客户变量中

 %{
     billing_contact: #Ecto.Association.NotLoaded<association:billing_contact is not loaded>,
     billing_contact_id: 305,
     business_contact: #Ecto.Association.NotLoaded<association:business_contact is not loaded>,
     business_contact_id: nil,
     disabled_message: "",
     end_date: nil,
     id: 6851,
     is_disabled: false,
     name: "test",
     start_date: #DateTime<2018-08-17 12:56:50.498078Z>,
     technical_contact: #Ecto.Association.NotLoaded<association:technical_contact is not loaded>,
     technical_contact_id: nil,
     users: #Ecto.Association.NotLoaded<association :users is not loaded>
  }

我要删除所有key value pairs where value is Ecto.Association.NotLoaded。我阅读了Map文档,但找不到任何根据值删除键值的功能

我想这样做dynamically。因此,只要有映射进来,它就会自动删除所有值为Ecto.Association的键值对。 我必须将此数据发送到前端。因此需要删除此Ecto.Association.Not加载键值对。

谢谢

2 个答案:

答案 0 :(得分:1)

使用Enum.filter/2

Enum.filter(input, fn
  {_, %Ecto.Association.NotLoaded{}} -> false
  _ -> true
end)

Ecto.Association.NotLoaded是一个结构,因此很容易对其进行模式匹配并拒绝所有不需要的kv对。

答案 1 :(得分:1)

这是使用comprehensions的一种方式:

for {k, v} <- customer,
    %Ecto.Association.NotLoaded{} != v,
    into: %{}, do: {k, v}