合并多个Sass地图

Ben*_*jen 1 maps merge sass

我有三张Sass地图,我想合并到一张地图中.使用map-merge函数,我只能将两个映射合并在一起.如何合并两张以上的地图?

我的情况的一个缩短的例子:

    $color-name: (
        blue: (
            default: blue,
            dark: navy,
            light: sky
        )
    );

    $color-event: (
        danger: (
            default: set($color-name, red),
            dark: set($color-name, red, dark),
            light: set($color-name, red, light),
        )
    );

    $color-category: (
        heading: (
            default: set($color-name, grey),
            dark: set($color-name, grey, dark),
            light: set($color-name, grey, light)
        )
    );

    $color: map-merge($color-name, $color-event, $color-category);
Run Code Online (Sandbox Code Playgroud)

big*_*les 12

我意识到这有点晚了,但由于这是我在google搜索时能找到的唯一解决方案,我想将其发布给寻找类似解决方案的其他人.

我偶然发现这个问题试图找到相同的答案,虽然@ cimmanon的答案可能适用于仅合并3个地图的具体例子,但如果你想要合并,比如10个地图,这不是一个好的解决方案.我想要一个可以应用于3个地图或50的解决方案.所以我编写了一个函数来处理将多个地图合并在一起:

@function map-collect($maps...) {
  $collection: ();

  @each $map in $maps {
    $collection: map-merge($collection, $map);
  }
  @return $collection;
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

$colors: map-collect($color-name, $color-event, $color-category); 
Run Code Online (Sandbox Code Playgroud)

由于这使用该map-merge功能,因此需要SASS 3.3+.

  • 你好,jlego,功能很棒。感谢分享!你把樱桃放在蛋糕上;) (2认同)

cim*_*non 10

如果 map-merge 需要 2 个映射并返回一个映射,但是您有 3 个映射……您使用 map-merge 两次。

$color: map-merge(map-merge($color-name, $color-event), $color-category);
Run Code Online (Sandbox Code Playgroud)