检查Sass Map中的值是否存在

时间:2017-04-03 15:19:18

标签: css sass

在下面的SASS代码片段中,我想检查地图是否有特定的密钥。如果不是,则返回默认值(在本例中为#bbb

@function contains($list, $var) {
    @return (false == index($list, $var));
}

$colors: (aaa: #aaa, bbb: #bbb);

$out: if(contains($colors, aaa), map-get($colors, aaa), #bbb);

body {
   color: $out;
}

由于某种原因,它总是返回#bbb。我在这里做错了什么建议?

1 个答案:

答案 0 :(得分:5)

第一个问题是,如果找不到值,则返回值为null

@function contains($list, $var) {
    @return (null == index($list, $var));
}

第二个问题涉及contains函数的语义。通常,如果在列表中找到值,则名为 contains 的函数应该返回true,否则返回false(至少我希望如此):

@function contains($list, $var) {
    @return (null != index($list, $var));
}

然后在地图上调用index function还有第三个问题。您必须传递一个键值对而不仅仅是该函数的键:

$out: if(contains($colors, aaa #aaa), map-get($colors, aaa), #bbb);

现在它按预期工作,但为了完整起见,让我告诉你,已经有一个内置函数,它完全符合你试图用你的contains函数实现的功能; map_has_key($map, $key)

$out: if(map-has-key($colors, aaa), map-get($colors, aaa), #bbb);