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;
}