Sass:仅返回具有唯一字符的列表值
任何人都可以提供一个函数,仅当列表中的值不包含重复字符时才从列表中返回值吗 例如,假设我有一个列表,其值为:Sass:仅返回具有唯一字符的列表值,sass,Sass,任何人都可以提供一个函数,仅当列表中的值不包含重复字符时才从列表中返回值吗 例如,假设我有一个列表,其值为:$list:(aa,bb,cd,ef) 预期产出: (cd,ef) 这是我到目前为止得到的代码。它根本不能解决我的问题,但经过多次试验,我只能得到这些 @function dupChars($list, $separator: comma) { $result: null; $temp: null; @each $item in $list { @for $i f
$list:(aa,bb,cd,ef)代码>
预期产出:
(cd,ef)
这是我到目前为止得到的代码。它根本不能解决我的问题,但经过多次试验,我只能得到这些
@function dupChars($list, $separator: comma) {
$result: null;
$temp: null;
@each $item in $list {
@for $i from 1 through str-length($item) {
@if not index($temp, str-slice($item, $i, $i)) {
$temp: append($temp, #{str-slice($item, $i, $i)}, $separator);
}
}
}
$result: append($result, $temp, $separator);
@return $result;
}
$list: (aa, bb, cd, ef);
/* #{dupChars($list)} */
获得的产量:
a、 b、c、d、e、f
为了解决这个问题,我发现一种方法是检查每个项目中有多少个相同的单孔字母(使用双@for
循环)
例如,假设有以下列表:abc
。如果结果是3(我项目的长度),我知道每个字母在该项目中只有一次,那么没有重复(3=3)
另一个例子。现在我们的列表是aab
。结果大于我的项目的长度,因此我们有重复项(5>3)
因此,当数字大于我的项目长度时,我不会将该$temp
附加到我的$result
守则:
@function dupChars($list, $separator: comma) {
$result: null;
$temp: null;
@each $item in $list {
$var: 0;
@for $i from 1 through length($item) {
@for $j from 1 through (str-length($item)) {
@for $k from 1 through (str-length($item)) {
//@debug str-slice($item, $j, $j) + "---" + str-slice($item, $k, $k) ;
@if (str-slice($item, $j, $j) == str-slice($item, $k, $k)) {
$var: $var + 1;
}
}
}
}
@if($var <= str-length($item)){
$temp: append($temp, #{$item}, $separator);
}
}
$result: append($result, $temp, $separator);
@return $result;
}
$lista: (aa, bb, cd, ef);
div{content: dupChars($lista)};
这是一个非常简单明了的解决方案。结果很好。非常感谢,不客气。使用sass找到解决方案非常有趣。:-)使用JS很容易解决这个问题,但是当涉及到Sass时,所有的解决方法都有点混乱。是的!如果没有@break
或类似的方法来停止循环,我必须找到一个解决方法。我找到了一篇关于这方面的文章:没错,Sass仍然需要发展很多,但凭借它的能力,我尝试将其作为一个递归函数,但它开始在列表中的所有值中寻找公共字符,并将它们视为重复字符。例如:如果$list:aa、ab、bb、cd
只有cd
会是一个输出,因为其余的都有公共字符。
a -- a // 1
a -- a // 2
a -- b
a -- a // 3
a -- a // 4
a -- b
b -- a
b -- a
b -- b // 5
@function dupChars($list, $separator: comma) {
$result: null;
$temp: null;
@each $item in $list {
$var: 0;
@for $i from 1 through length($item) {
@for $j from 1 through (str-length($item)) {
@for $k from 1 through (str-length($item)) {
//@debug str-slice($item, $j, $j) + "---" + str-slice($item, $k, $k) ;
@if (str-slice($item, $j, $j) == str-slice($item, $k, $k)) {
$var: $var + 1;
}
}
}
}
@if($var <= str-length($item)){
$temp: append($temp, #{$item}, $separator);
}
}
$result: append($result, $temp, $separator);
@return $result;
}
$lista: (aa, bb, cd, ef);
div{content: dupChars($lista)};
div {
content: cd, ef;
}