如果我的列表不像:
@colors: 'red' #f00, 'green' #0f0, 'blue' #00f;
我知道我可以遍历列表并获取颜色,但是如果我想获得特定的颜色呢?说我想做
extract(@colors, 'green')
将#0f0从列表中删除。有没有办法做到这一点?如果只需要几步而不是一步就可以了,我很好奇是否有可能。该文档仅提到通过索引从列表中获取项目。
答案 0 :(得分:3)
Lists Less插件具有at
功能,因此您的代码可能非常简单:
@colors: red #f00, green #0f0, blue #00f;
div {
color: at(@colors, green);
}
原创“遗产少”答案:
没有专门的功能,但为此写一个mixin不是问题:
@colors:
'red' #f00,
'green' #0f0,
'blue' #00f;
usage {
.by-key(@colors, 'green');
property: @by-key;
}
// ............................
// impl.
.by-key(@array, @key, @fallback...) {
.-(length(@array));
.-(@i) when (@i > 0) {.-((@i - 1))}
.-(@i) when (@key = extract(extract(@array, @i), 1)) {
@by-key: extract(extract(@array, @i), 2);
}
.--() {@by-key: @fallback} .--;
}
.by-key
mixin内发生了什么?
.-
与loop通过@array
混合,以找到感兴趣的对。.-(length(@array));
启动第一次迭代(从上一个@array
索引开始).-(@i) when (@i > 0) ...
是迭代mixin定义,它只调用下一次迭代(直到第一个@array
索引) - 因此这两个形成了我们的递归循环。.-(@i) when (@key = ...
是另一个迭代定义,用于将当前项密钥与感兴趣的密钥进行比较,如果它们匹配,则定义我们将用作the return值的@by-key
变量。.--() {@by-key: @fallback} .--;
是另一个mixin的定义和立即调用,它还定义了@by-key
变量,如果之前的循环中没有找到具有指定键的值,它将生效。 (因此,如果您将上面代码段中的mixin称为.by-key(@colors, 'banana', #123);
,它将返回#123
。此“回退”部分可能会被省略,如果数组中未找到任何键,则代码将导致错误(例如“变量@by-key
未定义”)。答案 1 :(得分:1)
我不相信你可以通过文本值提取,只提取索引。
您需要运行extract
两次,首先在您的起始数组中拆分不间断的键值对,以获取值的数组,然后提取所需的值:
property: extract(extract(@array, @item),2);
@array
是您的数组,@item
是您想要检索的数字索引。我不相信你可以提供文字密钥。
因此,在您的示例中,您需要执行以下操作:
property: extract(extract(@colors, 2),2);