Sass: возвращать значения списка только с уникальными символами - PullRequest
1 голос
/ 12 октября 2019

Может ли кто-нибудь предоставить функцию для возврата значений из списка, только если они не содержат повторяющихся символов?

Например, допустим, у меня есть список со значениями $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,е, е

1 Ответ

1 голос
/ 14 октября 2019

Чтобы попытаться решить эту проблему, я обнаружил, что для каждого элемента можно проверить, сколько в нем одинаковых букв (с использованием двойной петли @for).

Например, представьте, чтоесть этот список: abc. Если результат равен 3 (длина моего элемента), я знаю, что каждая буква содержится в этом элементе только один раз, тогда дубликатов не будет (3 = 3).

a -- a // 1
a -- b
a -- c
b -- a
b -- b // 2
b -- c
c -- a
c -- b
c -- c // 3

Другой пример. Теперь наш список aab. Результат больше, чем длина моего предмета, поэтому у нас есть дубликаты (5> 3)

a -- a // 1
a -- a // 2
a -- b 
a -- a // 3
a -- a // 4
a -- b
b -- a
b -- a
b -- b // 5

Поэтому, когда число больше длины моего предмета, я не добавляю это $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)};

Выход:

div {
  content: cd, ef;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...