You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SASS多维数组值修改求助:如何将$test中key2的值改为value x?

解决SASS嵌套Map的键值修改问题

嘿,刚好之前我也碰到过类似的需求!首先得纠正个小概念:你定义的这个其实是SASS的嵌套Map(不是数组哦,SASS里的数组是列表结构,这种键值对集合叫Map)。确实SASS原生没有提供直接修改嵌套Map内部值的API,但我们可以自己写一个递归函数来搞定这个需求,非常灵活。

实现思路

因为SASS的Map是不可变的(不能直接修改原Map,只能生成新的Map),所以我们可以写一个递归函数,顺着你指定的键路径一层层找到目标键,然后用map-merge来替换对应的值。

具体代码实现

首先定义这个递归更新函数:

@function update-nested-map($map, $keys, $new-value) {
  // 如果只剩最后一个键,直接合并更新
  @if length($keys) == 1 {
    @return map-merge($map, (nth($keys, 1): $new-value));
  } @else {
    // 取出当前层级的键和剩余的键路径
    $current-key: nth($keys, 1);
    $remaining-keys: slice($keys, 2);
    // 递归更新子Map
    $updated-submap: update-nested-map(map-get($map, $current-key), $remaining-keys, $new-value);
    // 合并更新后的子Map到原Map,返回新的Map
    @return map-merge($map, ($current-key: $updated-submap));
  }
}

如何使用

针对你给出的原始Map:

$test : ( 
  key : ( 
    key2 : "value 1", 
    key3 : "value 2"
  ) 
);

调用函数更新key下的key2值为"value x":

$updated-test: update-nested-map($test, (key, key2), "value x");

你可以用@debug指令验证结果:

@debug map-get(map-get($updated-test, key), key2); // 输出:"value x"

这个函数还支持更深层级的嵌套Map修改,比如如果你的Map有三层,只需要把键路径写成(key1, key2, key3)就可以啦。

内容的提问来源于stack exchange,提问作者Emanuel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 21:28:12