检查 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 .任何建议我在这里做错了什么?

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

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

第二个问题与包含函数的语义有关。通常,如果在列表中找到值,则调用 contains 的函数应返回 true,否则返回 false(至少我希望(:

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

然后是在地图上调用索引函数的第三个问题。您必须传递一个键值对,而不仅仅是此函数的键:

$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);

最新更新