Javascript 基于字符比较字符串
我试图将字符串的输入与Vanilla JS进行比较,我需要逐个字符地进行比较。然后,如果字符串的偏移量超过5个字符,则将该字符串添加到数组中。对于更简单的解释,我想比较以下字符串: 嵌入式系统第1部分 经济学第一部分 嵌入式系统第2部分 经济学第2部分 嵌入式系统实验室 因为我在字符的基础上比较了它们,所以我希望在比较了所有4个字符串之后,我在本例中的数组如下所示:Javascript 基于字符比较字符串,javascript,string,compare,Javascript,String,Compare,我试图将字符串的输入与Vanilla JS进行比较,我需要逐个字符地进行比较。然后,如果字符串的偏移量超过5个字符,则将该字符串添加到数组中。对于更简单的解释,我想比较以下字符串: 嵌入式系统第1部分 经济学第一部分 嵌入式系统第2部分 经济学第2部分 嵌入式系统实验室 因为我在字符的基础上比较了它们,所以我希望在比较了所有4个字符串之后,我在本例中的数组如下所示: array = [ "Embedded Systems Part 1", "Economics
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)
}
}
}
我理解为什么会发生这种情况,因为它会检查数组中的所有字符串,而不仅仅是相似的字符串
我试着用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",
]
编辑:
根据您的问题编辑,您似乎需要解析每一行以获得特定的文本部分,然后过滤生成的数组以删除重复项。一种方法是使用正则表达式。如果您仍然需要排除与原始问题类似的重复项,您可以从下面的原始答案中添加matches数组步骤
例如:
常数arr=[
总结:Kurs.grp:Inbyggda系统för CivilingeJörer Inbyggda系统för CivilingeJörer符号:fni时刻:Ibs计划:CivilingeJör datateknikåk 3-,
小结:Kurs.grp:Ekonomi för civilingenjörer Enterprentörskap och företagande för ingenjörer签名:msbk时刻:Fl 8计划:Byggingenjörsprogrammetåk 3 civilingenjör datateknik 3-Dataingenjörsprogrammetåkåk 3 Högskoleingenjöröindeör设计公司产品1-Högskoleingenjö-Maskinteknikåk 1-,
总结:Kurs.grp:Inbyggda系统för CivilingeJörer Inbyggda系统för CivilingeJörer符号:fni时刻:Ibs-Övning grupp 1计划:CivilingeJör datateknikåk 3-,
总结:Kurs.grp:Inbyggda系统för CivilingeJörer Inbyggda系统för CivilingeJörer符号:fni时刻:Ibs-Övning grupp 2计划:CivilingeJör datateknikåk 3-,
小结:Kurs.grp:Ekonomi för civilingenjörer Enterprentörskap och företagande för ingenjörer签名:msbk时刻:Fl 9计划:Byggingenjörsprogrammetåk 3 civilingenjör datateknik 3-Dataingenjörsprogrammetåkåk 3 HögskoleingenjöröInd r设计项目1-Högskoleingenjö-Maskinteknikåk 1-,
];
const lines=arr.mapline=>line.match/?:摘要:Kurs.grp:.+?:符号:/[1];
const results=lines.filterline,i=>{
如果!lines.0,i.includeLine{
返回true;
}
};
控制台。日志结果;
//[Inbyggda system för Civilingejörer Inbyggda system för Civilingejörer,Ekonomi för Civilingejörer Entreprentörskap och företa and e för Ingenejörer]字符串总是成对的吗?不,这可能是个坏例子,但它看起来可能更像:嵌入式系统第1部分,经济学第1部分,嵌入式系统第2部分,经济学第2部分事实上,我不知道字符串的顺序,你的问题包括一个更合理的例子。谢谢@HereticMonkey,我已经做到了,我知道,当我尝试另一个例子时,我对这个问题有了更好的理解。。只是不知道如何修复它..谢谢benvc,这当然有帮助,也许我的新示例又坏了,但我的实际问题比这更麻烦,请查看我对输入行的新编辑,以及我希望我的数组的实际外观。。。谢谢again@Addeuz-是的,这是一个有点不同的问题。查看更新问题对应的答案编辑。这非常完美,非常感谢!在match函数中你做了什么?它是正则表达式吗?我真的需要更多地了解这些@是的,它是一个正则表达式。您可以将表达式与文本行一起复制到类似的站点中,您将看到关于正则表达式工作原理的详细说明。在本例中,我们使用一些非捕获组来匹配定界字符串,而不捕获它们,然后使用普通捕获组来匹配定界字符串之间的文本。
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",
]