我想获取Total-Records
HTTP响应的response.headers
密钥。
问题是在某些浏览器中它是由服务器Total-Records
返回的,但在其他浏览器中,它是小写的。
我想获得Total-Records
标头的值,无论其情况如何。
你会怎么做?
答案 0 :(得分:3)
我认为最便宜的方式 - 一般来说 - 只是做两个查看,看看你得到了什么。例如,
case (Dict.get "Total-Records" response.headers, Dict.get "total-Records" response.headers) of
(Just s, _) ->
s
(_, Just s) ->
s
_ ->
<handle error case>
或者,您可以将上述内容替换为if then else
。
答案 1 :(得分:3)
如果没有通用的不区分大小写的字典,您可以将手动查找结合在一起:
caseInsensitiveGet : String -> Dict String v -> Maybe v
caseInsensitiveGet key dict =
let
lowerKey = String.toLower key
in
Dict.toList dict
|> List.filterMap (\(k, v) ->
if String.toLower k == lowerKey then
Just v
else
Nothing)
|> List.head
请注意,字典越大,性能越差。在这种形式下,可以在不同情况下对同一文本进行多种变换,因此它并不完美,但如果您只是寻找标题,那就足够了。
答案 2 :(得分:3)
另一种方法是使用find
function from elm-community/dict-extra
提供自定义比较运算符:
import Dict.Extra
caseInsensitiveGet : String -> Dict String v -> Maybe v
caseInsensitiveGet key =
let
lowerKey = String.toLower key
in
Dict.Extra.find (\k _ -> String.toLower k == lowerKey)
>> Maybe.map Tuple.second
答案 3 :(得分:0)
在这种情况下,我想我可能会去(使用elm-community/list-extra):
getFirstCaseInsensitive : String -> Dict String v -> Maybe v
getFirstCaseInsensitive key dict =
let
key_ =
String.toLower key
in
dict
|> Dict.toList
|> List.Extra.find
((==) key_ << String.toLower << Tuple.first)
|> Maybe.map Tuple.second
答案 4 :(得分:0)
谢谢大家的回答,我最终使用了Dict.Extra.mapKeys
:
import Dict.Extra
headers =
Dict.Extra.mapKeys String.toLower response.headers