我目前正在做一个谜题,但我在制定如何做以下事情的想法时遇到了麻烦。下面是我的想法的一些代码(这还没有工作)
const words = ['this', 'is', 'my', 'dog', 'bit', 'bite', 'every'];
const strings = ['thisis', 'thisisacat', 'thisisaduck', 'thisismy', 'thisismydog', 'bitevery'];
var count;
for (var i = 0 ; i < strings.length ; i++)
{
for (var j = 0; j <words.length; j++)
{
if(strings[i].indexOf(words[j]) !== -1)
{
count+=words[j].length;
}
}
}
基本上我想首先转到this
这个词,检查它是否在strings[j]
。如果是,则获得words[i]
的长度,然后转到words[i]'th
内的strings[j]
位置,这意味着我想要&#39; is
&#39; &{39; thisis
&#39;的一部分。基本上我只想测试strings
中的每个元素是否可以由words
中的任意数量的组合来表示。这当然可以使用正则表达式完成,但我想使用当前的思维过程。
TLDR
以我目前的方式,如何检查words
数组中每个元素中是否存在strings
数组中的单词(我正在尝试使用indexOf
),如果是,转到单词位置的长度意义转到i
thisis
所在的位置。我意识到我说它的方式可能有点冗长,但我不确定如何用它来表达它。任何帮助表示赞赏。
运行示例
我们在strings[i]
,现在我们检查words
中的任何元素是否在strings[i]
中。现在this
位于'thisis'
中,因此添加四个索引,因为它的长度为4,要到达thisis
的第4个位置,现在我们有{{1}所以is
的其余部分再次循环,现在words
位于is
内,这意味着我们已成功使用is
中的一些单词创建了一个单词阵列。请注意,我实际上并不想从words
删除this
,因为我知道完全修改字符串在内存中非常昂贵。
另一次运行
在thisis
中取thisismydog
。让我们重复一遍。 strings
位于this
内,所以现在转到thisismydog
的第4个以上(因为thisismydog
的长度为4),现在我们考虑this
。现在再次迭代查看单词中的元素。我们看到ismydog
在那里,所以我们转到is
中的第二个元素,即ismydog
。由于我们到达了单词的末尾,我们可以成功地得出结论:mydog
确实可以通过单词中的这些元素的组合来表示。
答案 0 :(得分:-1)
将var count;
更改为var count = 0;
。你必须初始化数字,否则它将是NaN
。使用控制台或alert
证明它。