Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于字符比较字符串_Javascript_String_Compare - Fatal编程技术网

Javascript 基于字符比较字符串

Javascript 基于字符比较字符串,javascript,string,compare,Javascript,String,Compare,我试图将字符串的输入与Vanilla JS进行比较,我需要逐个字符地进行比较。然后,如果字符串的偏移量超过5个字符,则将该字符串添加到数组中。对于更简单的解释,我想比较以下字符串: 嵌入式系统第1部分 经济学第一部分 嵌入式系统第2部分 经济学第2部分 嵌入式系统实验室 因为我在字符的基础上比较了它们,所以我希望在比较了所有4个字符串之后,我在本例中的数组如下所示: array = [ "Embedded Systems Part 1", "Economics

我试图将字符串的输入与Vanilla JS进行比较,我需要逐个字符地进行比较。然后,如果字符串的偏移量超过5个字符,则将该字符串添加到数组中。对于更简单的解释,我想比较以下字符串:

嵌入式系统第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)
        }
    }
}
我理解为什么会发生这种情况,因为它会检查数组中的所有字符串,而不仅仅是相似的字符串

我试着用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",
              ]