Как удалить дубликаты не зависимо от регистра букв?



  • Экшен Список -> удалить дубликаты, не удалит дубли например такие
    Строка - это предложение из нескольких слов, например так:

    When I consider every thing that grows
    Holds in perfection but a little moment,
    That this huge stage presenteth nought but shows
    Whereon the stars in secret influence comment;
    When I perceive that men as plants increase,
    Cheered and cheque'd even by the self-same sky,
    Vaunt in their youthful sap, at height decrease,
    And wear their brave state out of memory
    

    И кстати, забыл указать что каждая строка это целое предложение, то есть нужно очистить список от дубликатов строк независимо от регистра букв в преложении в строках.
    Подскажите JS скрипт который удаляет дубликаты независимо от регистра букв?



  • @Nikolas said in Как удалить дубликаты не зависимо от регистра букв?:

    Экшен Список -> удалить дубликаты, не удалит дубли например такие

    Book
    BOOK
    

    Подскажите JS скрипт который удаляет дубликаты независимо от регистра букв?

    Перебором



  • @Fox список огромный и перебор займет часы(



  • @Nikolas изучайте базы данных, для огромных списков на одном js ничего путнего не напишите



  • @UserTrue

    Написал , но почему то удаляет лишние строки( , не пойму где ошибка:

    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;
    


  • @Nikolas Жесть. Почему бы не хранить ваш стоп лист в нижнем регистре, и просто слово которое требуется проверить приводить к нижнему регистру перед проверкой? Ну или на худой конец приводить список к нижнему регистру перед проверкой. Нет смысла гонять цикл в цикле

    Если же регистр имеет значение, тогда вот пример

     const list = [
            'Book',
            'book',
            'BOOK',
            'book',
     ]
    
    const hash = new Set(list);
    const uniq = Array.from(hash); //Array(3) [ "Book", "book", "BOOK" ]
    


  • @UserTrue
    Да, забыл указать что каждая строка это целое предложение, то есть нужно очистить список от дубликатов строк независимо от регистра букв в преложении в строках.



  • @UserTrue said in Как удалить дубликаты не зависимо от регистра букв?:

    @Nikolas Жесть. Почему бы не хранить ваш стоп лист в нижнем регистре, и просто слово которое требуется проверить приводить к нижнему регистру перед проверкой? Ну или на худой конец приводить список к нижнему регистру перед проверкой. Нет смысла гонять цикл в цикле

    Если же регистр имеет значение, тогда вот пример

     const list = [
            'Book',
            'book',
            'BOOK',
            'book',
     ]
    
    const hash = new Set(list);
    const uniq = Array.from(hash); //Array(3) [ "Book", "book", "BOOK" ]
    

    При выполнении в экшене Яваскрипт этого кода, в басе содержимое переменной [[LIST_WITH_FILE_CONTENT]] вообще не поменялось.

    let list = [[LIST_WITH_FILE_CONTENT]];
    
    const hash = new Set(list);
    const uniq = Array.from(hash);
            [[LIST_WITH_FILE_CONTENT]]=list;
    


  • @Nikolas said in Как удалить дубликаты не зависимо от регистра букв?:

    При выполнении в экшене Яваскрипт этого кода, в басе содержимое переменной [[LIST_WITH_FILE_CONTENT]] вообще не поменялось.

    Ну еще бы, вы по сути написали это. Что должно поменяться?

     let list = [[LIST_WITH_FILE_CONTENT]];
     [[LIST_WITH_FILE_CONTENT]]=list;
    


  • В общем сам разобрался , вот готовый код, может кому-то будет полезен (вставляем в кубик Яваскрипт):

    let arr = [[LIST_WITH_FILE_CONTENT]];
    let res = (
      [...arr.map(x => x.toLowerCase()).reduce(
        (m, c, i) => m.get(c) ? m : m.set(c, arr[i]), new Map
      ).values()]
      
    );
    [[LIST_WITH_FILE_CONTENT]]=res;
    

    Код удаляет дубликаты в списке [[LIST_WITH_FILE_CONTENT]] независимо от регистра букв в эталоне строки и дубле этой строки.


Log in to reply