通过与javascript中数组的单词进行比较来连接字符串的单词

concatenate words of a string by comparing with words of an array in javascript

本文关键字:比较 连接 字符串 单词 单词进 javascript 数组      更新时间:2023-09-26

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

我看不出我的代码有什么问题。有人能帮忙吗?

您可以执行以下操作;

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);

它首先获取str,并通过使用空白作为分隔符将其拆分为一个数组。

在reduce中,我们将逐个获取每个单词(c(,并将其与前一个单词(p[p.length-1](连接以生成测试字符串(testStr(。

如果在reference数组的项中找到testStr,我们将用它的"与下一个单词连接"版本替换p数组中的最后一个项。如果在reference数组的项中找不到testStr,我们将把当前字(c(推送到p数组。并返回p进行下一个转弯。

我不确定您的操作方式是否是最佳,但您的代码只有一个小问题。您使用的是glueArray的散列,这意味着您将键值0分配给"jesuis",将键值1分配给"gentil"等。当您使用for循环遍历数组时,您得到的是索引值,而不是单词。我建议这个小的解决方案,它似乎有效。

//your code before
for (glueIndice in glueArray) {
    var gluewords = glueArray[glueIndice];
    var arrayofstring = stringBase.split(" ");
//your code after