Сравнение строк на символьной основе - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь сравнить ввод строк с Vanilla JS, и мне нужно сравнить их на символьной основе.А затем добавьте строку в массив, если строки отключены более чем на 5 символов.Для более простого объяснения я хочу сравнить эти строки:

  • Embedded Systems part 1
  • Economics part 1
  • Embedded Systems part 2
  • Экономика Часть 2
  • Лаборатория встраиваемых систем

И поскольку я сравниваю их по символам, я хочу, чтобы мой массив в этом примере выглядел следующим образом после сравнения всех 4 строк:

array = [
         "Embedded Systems Part 1",
         "Economics Part 1",
         "Embedded Systems Laboration
         ]

Итак, я уже пробовал использовать этот код:

let inputLines = inputArea.value.split("\n")
let summaryArray = []
let differenceVar = 0

for(let inputLine of inputLines) {
    if (summaryArray.length == 0)   
        // Pushes the first input line, so that's in the array                   
        summaryArray.push(inputLine)
    }
    // Using this kind of loop because I want to push to the array
    // in this loop and then compare that newly pushed string to
    // the rest of the strings as well
    for (let i = 0; i < summaryArray.length; i++) {
        const arrayLine = summaryArray[i]
        for (let j = 0; j < arrayLine.length; j++) {
            const arrayChar = arrayLine[j]                       
            const inputChar = inputLine[j]
            if (arrayChar != inputChar) {
                differenceVar++
            }
        }
        if (differenceVar > 5) {
            differenceVar = 0
            summaryArray.push(inputLine)
        }
    }
}

Я получаю этот массив:

array = ["SUMMARY:Embedded Systems Part 1",
         "SUMMARY:Economics Part 1",
         "SUMMARY:Embedded Systems Part 2",
         "SUMMARY:Economics Part 2",
         "SUMMARY:Economics Part 2",
         "SUMMARY:Embedded Systems Laboration",
         "SUMMARY:Embedded Systems Laboration",
         "SUMMARY:Embedded Systems Laboration"]

Я понимаю, почему это происходит, потому что он проверяетвсе строки в массиве, а не только те, которые похожи ..

Я пытался сделать это с indexOf(), но это не работает, потому что есть только бит, который каждый раз (почти), поэтому он всегда возвращает -1 ...

Любая помощь в том, как я должен думать об этой проблеме, очень ценится!

РЕДАКТИРОВАТЬ: Таким образом, мой пример, вероятно, не был лучшим, хотяУ меня есть догадка о том, как решить мою проблему.Но то, как на самом деле выглядят мои входные строки, выглядит следующим образом:

array = [
         "SUMMARY:Kurs.grp: Inbyggda system för civilingenjörer Inbyggda system för civilingenjörer Sign: fni Moment: Ibs Program: Civilingenjör datateknik åk 3-",
         "SUMMARY:Kurs.grp: Ekonomi för civilingenjörer Entreprenörskap och företagande för ingenjörer Sign: msbk Moment: Fl 8 Program: Byggingenjörsprogrammet åk 3 Civilingenjör datateknik åk 3- Dataingenjörsprogrammet åk 3 Högskoleingenjör - Ind design och produktutv åk 1- Högskoleingenjör - Industriell ekonomi åk 1- Högskoleingenjör - Maskinteknik åk 1-",
         "SUMMARY:Kurs.grp: Inbyggda system för civilingenjörer Inbyggda system för civilingenjörer Sign: fni Moment: Ibs - Övning grupp 1 Program: Civilingenjör datateknik åk 3-",
         "SUMMARY:Kurs.grp: Inbyggda system för civilingenjörer Inbyggda system för civilingenjörer Sign: fni Moment: Ibs - Övning grupp 2 Program: Civilingenjör datateknik åk 3-",
         "SUMMARY:Kurs.grp: Ekonomi för civilingenjörer Entreprenörskap och företagande för ingenjörer Sign: msbk Moment: Fl 9 Program: Byggingenjörsprogrammet åk 3 Civilingenjör datateknik åk 3- Dataingenjörsprogrammet åk 3 Högskoleingenjör - Ind design och produktutv åk 1- Högskoleingenjör - Industriell ekonomi åk 1- Högskoleingenjör - Maskinteknik åk 1-",
        ]

Это продолжается почти для 40 строк.

И из этих входных строк я хотел бы, чтобы выходной массив выглядел следующим образом:

outputArray = [
               "Inbyggda system för civilingenjörer Inbyggda system för civilingenjörer",
               "Ekonomi för civilingenjörer Entreprenörskap och företagande för ingenjörer",
              ]

1 Ответ

0 голосов
/ 19 февраля 2019

РЕДАКТИРОВАТЬ:

Исходя из вашего вопроса редактирования, похоже, что вам нужно проанализировать каждую строку, чтобы получить только определенный раздел текста, а затем отфильтровать полученный массив для удаления дубликатов.Один из способов сделать это - использовать регулярные выражения.Если вам все еще нужно исключить дубликаты, похожие на исходный вопрос, вы можете добавить в шаг массива «совпадения» из исходного ответа ниже.

Например:

const arr = [
  "SUMMARY:Kurs.grp: Inbyggda system för civilingenjörer Inbyggda system för civilingenjörer Sign: fni Moment: Ibs Program: Civilingenjör datateknik åk 3-",
  "SUMMARY:Kurs.grp: Ekonomi för civilingenjörer Entreprenörskap och företagande för ingenjörer Sign: msbk Moment: Fl 8 Program: Byggingenjörsprogrammet åk 3 Civilingenjör datateknik åk 3- Dataingenjörsprogrammet åk 3 Högskoleingenjör - Ind design och produktutv åk 1- Högskoleingenjör - Industriell ekonomi åk 1- Högskoleingenjör - Maskinteknik åk 1-",
  "SUMMARY:Kurs.grp: Inbyggda system för civilingenjörer Inbyggda system för civilingenjörer Sign: fni Moment: Ibs - Övning grupp 1 Program: Civilingenjör datateknik åk 3-",
  "SUMMARY:Kurs.grp: Inbyggda system för civilingenjörer Inbyggda system för civilingenjörer Sign: fni Moment: Ibs - Övning grupp 2 Program: Civilingenjör datateknik åk 3-",
  "SUMMARY:Kurs.grp: Ekonomi för civilingenjörer Entreprenörskap och företagande för ingenjörer Sign: msbk Moment: Fl 9 Program: Byggingenjörsprogrammet åk 3 Civilingenjör datateknik åk 3- Dataingenjörsprogrammet åk 3 Högskoleingenjör - Ind design och produktutv åk 1- Högskoleingenjör - Industriell ekonomi åk 1- Högskoleingenjör - Maskinteknik åk 1-",
];

const lines = arr.map(line => line.match(/(?:SUMMARY:Kurs.grp:)(.+)(?:Sign:)/)[1]);
const results = lines.filter((line, i) => {
  if (!lines.slice(0, i).includes(line)) {
    return true;
  }
});

console.log(results);
// [" Inbyggda system för civilingenjörer Inbyggda system för civilingenjörer ", " Ekonomi för civilingenjörer Entreprenörskap och företagande för ingenjörer "]

ORIGINAL:

Похоже, что вы пытаетесь удалить строки из вашего массива в зависимости от того, начинаются ли они с последовательности символов без учета регистраэто то же самое, что и предыдущая строка в массиве.Если это точное изложение вашей цели, то вы можете использовать следующий подход:

  • split() входной текст в конце строки
  • map() результирующий массив длясоответствующий массив «совпадений», где каждая строка строчная, а желаемое количество символов удаляется из конца строки (в данном случае 5)
  • filter() массива, проверяя, является ли строчная / нарезаннаяверсия текущей строки существует с любым предыдущим индексом в массиве совпадений

Например:

const text = `Embedded Systems part 1
Economics part 1
Embedded Systems part 2
Economics Part 2
Embedded Systems Laboration`;
  
const lines = text.split('\n');
const matches = lines.map(line => line.toLowerCase().slice(0, -5));
const results = lines.filter((line, i) => {
  if (!matches.slice(0, i).includes(line.toLowerCase().slice(0, -5))) {
    return true;
  }
});

console.log(results);
// ["Embedded Systems part 1", "Economics part 1", "Embedded Systems Laboration"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...