我正在尝试使用Vanilla JS比较字符串的输入,我需要逐个字符地比较它们。然后,如果字符串相差超过5个字符,则将字符串添加到数组中。对于更简单的解释,我想比较以下字符串:
由于我是基于字符进行比较的,因此我希望本示例中的数组在比较所有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",
]
答案 0 :(得分:1)
编辑:
根据您的问题编辑,您似乎需要解析每一行以获取特定的文本部分,然后过滤结果数组以删除重复项。一种方法是使用正则表达式。如果您仍然需要排除类似于原始问题的重复项,则可以从下面的原始答案中添加“匹配项”数组步骤。
例如:
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 "]
原始:
您似乎正在尝试根据它们是否以不区分大小写的字符序列开头(与数组中的前一个字符串相同)开头,从数组中删除字符串。如果那是您目标的准确摘要,那么可以使用以下方法。
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"]