我是榆树的新手。现在,我试图发出请求。
请求返回一个对象数组。实际上,这些是搜索结果,其中数组中的每个对象= price和productId。
结构:
data: [
{
price: 7,
productId: 12
},
{
price: 4,
productId: 2
}
]
此刻,我只得到一系列价格:
getApiPrice: Flags -> Cmd Msg
getApiPrice params =
Http.send NewPrice (Http.get (apiUrlConstructor params) Decoders.priceDecoder)
priceDecoder: Decode.Decoder (List Float)
priceDecoder =
Decode.field "data" (Decode.list (Decode.field "priceRub" Decode.float))
然后,我对数组进行排序并获取第一个元素(我需要价格最低的结果)
现在,我需要productId字段。我可以在请求中进行排序,以获取具有最低价格和其productId的对象(或元组)。
答案 0 :(得分:3)
其中一种选择是将您的数据解码为价格列表中间的产品记录列表。然后,它将足够灵活以获取handleInputChange(event) {
const value = event.target.value;
const name = event.target.name;
this.setState({
[name]: value
});
}
,price
和将来可能出现的任何其他字段:
productId
我假设您正在处理type alias Product = { price : Float, productId: Int }
productDecoder : Decode.Decoder Product
productDecoder =
Decode.map2 Product
(Decode.field "price" Decode.float)
(Decode.field "productId" Decode.int)
decoder: Decode.Decoder (List Product)
decoder =
Decode.field "data" (Decode.list productDecoder)
消息时在update
函数中对列表进行排序。我仍然可以使用List.sortBy函数在此完成操作。或者,列表可以在NewPrice
的帮助下直接在decoder
中排序:
Decode.map
现在,在decoder: Decode.Decoder (List Product)
decoder =
Decode.map (List.sortBy .price) (Decode.field "data" (Decode.list productDecoder))
消息中收到了已排序的列表。剩下的唯一步骤-在NewPrice
函数或update
中使用List.head再次获得第一个元素:
decoder
这里是ellie-app,用于演示。