Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как удалить дубликаты не зависимо от регистра букв? (https://javascript.ru/forum/events/83879-kak-udalit-dublikaty-ne-zavisimo-ot-registra-bukv.html)

mik888em 11.04.2022 10:40

Как удалить дубликаты не зависимо от регистра букв?
 
Есть список [[LIST_WITH_FILE_CONTENT]] в котором нужно удалить дубли независимо от регистра букв. Список кстати содержит более 100 строк.

Пербором не получается, так как если вот так:
Пример переменной со списком [[LIST_WITH_FILE_CONTENT]] :
Код:

Book
BOOK

т. к. Book не равно BOOK - не удалит, из за разного регистра.

Я писал JS который удаляет из списка [[LIST_WITH_FILE_CONTENT]] все строки содержащие элемент из списка [[BLACK_LIST]]
независимо от регистра букв. Подскажите, как удалить дубли из списка [[LIST_WITH_FILE_CONTENT]] независимо от регистра букв, хочу переделать этот JS-код (см. ниже)?

JS-код:
[[LIST_WITH_FILE_CONTENT]] = [[LIST_WITH_FILE_CONTENT]].filter(function(line){
  return [[BLACK_LIST]].every(function(forbiddenWord) {
    return line.toLowerCase().indexOf(forbiddenWord.toLowerCase()) === -1;
  });
});

рони 11.04.2022 10:51

mik888em,
набросай строк 20 LIST_WITH_FILE_CONTENT

ksa 11.04.2022 10:51

Цитата:

Сообщение от mik888em
Есть список [[LIST_WITH_FILE_CONTENT]] в котором нужно удалить дубли независимо от регистра букв.

Как вариант...
let a = ['Book', 'BOOK']
const o = {}
a = a.filter(el => {
	el = el.toLowerCase()
	if (o[el]) return false
	o[el] = true
	return true
})
alert(a)

рони 11.04.2022 11:21

ksa,
:yes:

mik888em 11.04.2022 17:46

Цитата:

Сообщение от рони (Сообщение 544631)
ksa,
:yes:


И кстати, забыл указать что каждая строка это целое предложение, то есть нужно очистить список от дубликатов строк независимо от регистра букв в преложении в строках.
Написал, но код почему-то удаляет лишние строки, не пойму где ошибка:
const list = [[LIST_WITH_FILE_CONTENT]];

const uniqueList = list.filter((word, index) => {
  const regexp = new RegExp(word, 'i');
 
  for (let i = 0; i < list.length; ++i) {
    if (!regexp.test(list[i])) continue;
   
    if (i === index) return true;
     
    return false;
  }
});

[[LIST_WITH_FILE_CONTENT]]=uniqueList;

рони 11.04.2022 17:52

mik888em,
можно нормальные примеры, без [[]]] с возможностью проверить результат?
алгоритм вам показал ksa, пост #3.

вариант оформления макета можно посмотреть тут


Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

рони 11.04.2022 18:19

mik888em,
<script>
        let text = `
        И кстати, забыл указать,
        что каждая строка это целое предложение,
        то есть нужно очистить список от дубликатов строк,
        то есть НУЖНО ОЧИСТИТЬ список от дубликатов строк,
        ЧТО КАЖДАЯ строка это целое предложение,
        независимо от регистра букв в преложении в строках.
        И кстати, забыл указать,`;
        let redo = new Set();
        let regStr = /.+(\n|$)/mg;
        function replace(str) {
            return redo.has(str.trim().toLowerCase()) ? '' : (redo.add(str.trim().toLowerCase()), str);
        }
        text = text.replace(regStr, replace);
        document.write(`<pre>${text}</pre>`)
    </script>


Часовой пояс GMT +3, время: 15:00.