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
相关产品推荐
相关产品推荐

