javascript - 基于字符比较字符串

标签 javascript string compare

我正在尝试将字符串输入与 Vanilla JS 进行比较,并且我需要逐个字符地比较它们。然后,如果字符串偏离超过 5 个字符,则将字符串添加到数组中。为了更简单的解释,我想比较这些字符串:

  • 嵌入式系统第 1 部分
  • 经济学第 1 部分
  • 嵌入式系统第 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",
              ]

最佳答案

编辑:

根据您的问题编辑,您似乎需要解析每一行以获取文本的特定部分,然后过滤结果数组以删除重复项。一种方法是使用正则表达式。如果您仍然需要排除与原始​​问题类似的近似重复项,您可以在下面的原始答案中添加“匹配”数组步骤。

例如:

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;
  }
  
  return false;
});

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 "]

原文:

您似乎正在尝试根据字符串是否以与数组中先前字符串相同的不区分大小写的字符序列开头来从数组中删除字符串。如果这是您目标的准确总结,那么您可以使用以下方法。

  • 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;
  }
  
  return false;
});

console.log(results);
// ["Embedded Systems part 1", "Economics part 1", "Embedded Systems Laboration"]

关于javascript - 基于字符比较字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54754112/

相关文章:

c# - 将包含 16 位数字的字符串拆分为 4 组

arrays - 检查列表和数组是否相等 F#

javascript - 如何知道用户的地理位置是否接近某个位置?

javascript - 是否可以使用 JQuery 的模态确认框?

javascript - 当成员使用 discord.js selfmute/selfdeafen/selfunmute/selfundeafen 时,我如何记录他们?

javascript - 将数据发送到 HighCharts

java - 将 ByteBuffer 的一部分转换为字符串

c - 实现以下函数,将 float 的字符串表示形式转换为 double :

c# - 通过 SDK 在 Adob​​e Acrobat 中比较 PDF 文档

ios - iOS 中的字符串比较