【问题标题】:How can an empty Map be created in Sass?如何在 Sass 中创建一个空的 Map?
【发布时间】:2019-03-04 18:04:12
【问题描述】:

以下代码将在变量$test 中创建一个空映射,但是有没有合适的方法来完成这个?这似乎太老套了,不是获取空地图的最佳方法。

$test: map-remove((default:null), 'default');

@if type-of($test) != map {
    @warn "This is not a map: #{inspect($test)}";
}
@else {
    @warn "This is a map: #{inspect($test)}";
}

WARNING: This is a map: ()
         on line 7 of app/styles/functions/map.scss

【问题讨论】:

    标签: sass sass-maps


    【解决方案1】:

    可以通过非常简单的方式创建空地图:

    $emptyMap: ();
    

    根据地图上的official documentation,空列表和地图都是使用() 创建的。所以上面的代码是一个完全有效的空映射,但是在测试类型时,控制台会告诉你它是一个列表(注意它的类型仍然是映射或列表)。

    $map: ();
    @warn "#{type-of($map)}";
    // Warning: list
    

    向地图添加内容后,控制台会告诉您这是一张地图。

    $map: ();
    $newMap: map-merge($map, (1: test));
    @warn "#{type-of($newMap)}";
    // Warning: map
    

    【讨论】:

    • 我明白了。我不打算向它添加任何内容,但我确实打算通过map-has-key() 传递它,如果类型是list,这是一个问题。
    • 即使控制台将空地图报告为列表,它仍然被视为空地图或空列表。你可以通过map-has-key()传递它就好了。
    • 嗯...是的,看起来是这样。我发誓我之前遇到了错误。
    • 如果此解决方案适合您,请接受它作为正确答案。
    【解决方案2】:

    没有更好的本地方法可以做到这一点,但您可以缩短它。

    $map: map-remove((x:x), x);
    
    .foo {
      output: type-of($map); // map
    }
    

    另一种解决方案是使用自定义函数。

    @function empty-map($x: x) {
      @return map-remove(($x:$x), $x);
    }
    
    $map2: empty-map();
    $map3: empty-map();
    
    .foo {
      output: type-of($map2); // map
      output: type-of($map3); // map
    }
    

    SassMeister demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-01
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-04
      • 2019-12-13
      相关资源
      最近更新 更多