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

时间:2016-09-04 13:14:30

标签: javascript html arrays string algorithm

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

我不知道我的代码有什么问题。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

可能你可以这样做;

&#13;
&#13;
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;
&#13;
&#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