Чтобы попытаться решить эту проблему, я обнаружил, что для каждого элемента можно проверить, сколько в нем одинаковых букв (с использованием двойной петли @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;
}