HTML:
<!DOCTYPE html>
<html>
<head>
<title>Glue words</title>
</head>
<body>
<textarea rows="20" cols="50" id="textbase">
Write text to fix after. je suis gen til l ol
</textarea>
<br>
<button type="button" onclick="gluefct()">Tokenize</button>
</body>
</html>
JS:
function gluefct() {
var space = " ";
var glueArray = ["jesuis", "gentil", "lol"];
var stringBase = document.getElementById("textbase").value;
var newString = "";
for (gluewords in glueArray) {
var arrayofstring = stringBase.split(" ");
var numberelement = arrayofstring.length;
var i = 0;
while (i < numberelement) {
var motactuel = arrayofstring[i];
var n = i;
while (motactuel.length < gluewords.length) {
n = n+1;
motactuel = motactuel + arrayofstring[n];
}
if (motactuel == gluewords) {
newString = newString + motactuel + space;
i = n+1;
}
else {
newString = newString + arrayofstring[i] + space;
i = i + 1;
}
}
stringBase = newString;
newString = "";
}
document.getElementById("textbase").value = stringBase;
}
基本上,我尝试做的是通过检查字符串数组中的完整单词来粘贴已经分隔的字符串中的单词。
例如:
这是我的阵列:
var glueArray = ["jesuis", "gentil", "lol"];
这是我的字符串:
"je suis gen til lo l et voilà"
这应该是函数的结果:
"jesuis gentil lol et voilà"
我不知道我的代码有什么问题。有人可以帮忙吗?
答案 0 :(得分:2)
可能你可以这样做;
var reference = ["jesuis", "gentil", "lol"],
str = "je su is gen til lo l et voilà",
result = str.split(/\s+/)
.reduce((p,c,i,a) => { var testStr = p[p.length-1] + c;
reference.some(s => s.indexOf(testStr) !== -1) ? p[p.length-1] = testStr
: p.push(c);
return p;
},[""])
.join(" ");
console.log(result);
&#13;
首先取str并将空格分隔为数组。
在reduce中,我们将逐个接受每个单词(c
)并将其与前一个单词(p[p.length-1]
)连接以生成测试字符串(testStr
)。
如果在testStr
数组的项目中找到reference
,我们将替换p
数组中的最后一项&#34; s&#34;下一个字&#34;版。如果在testStr
数组项中找不到reference
,我们会将当前字(c
)推送到p
数组。并在下一回合返回p
。
答案 1 :(得分:0)
我不确定你是怎么做的最好,但你的代码只有一个小问题。您正在为glueArray使用散列,这意味着您将键值0分配给“jesuis”,将1分配给“gentil”等。当您使用for循环遍历数组时,您将获得索引值而不是话。我建议这个小修复似乎有用。
//your code before
for (glueIndice in glueArray) {
var gluewords = glueArray[glueIndice];
var arrayofstring = stringBase.split(" ");
//your code after