我正在做一个项目,将一个简单的句子转换成一个“青少年”会说的陈述。我想在用户输入的句子中的每三个单词之后添加“你知道”这个短语。当我在最后打印转换后的句子时,似乎每个人都有一个额外的'你知道'。我的数组中的项目(或单词)。我怎么会在最后失去所有额外的'你知道'?或者我该如何防止这种情况发生?这是我的代码:
var k = 3;
var phrase = "you know";
var sentence = prompt("Enter a sentence: ");
sentence = sentence.split(" ");
for (word in sentence) {
sentence.splice(k, 0, phrase);
k += 4;
}
sentence = sentence.join(" ");
alert(sentence);
答案 0 :(得分:1)
for for for in
如果要迭代迭代(例如数组)中的每个项目,则应使用for (let x of arr) ...
而不是for (let x in arr)
。后者用于迭代对象中的每个键,包括原型继承的键。
改变您的迭代内容
你正在迭代一件事并同时修改它,这总是一个令人头痛的好方法。如果要在遍历数组时以增量方式改变数组,请先复制一个副本:var newSentence = sentence.slice()
,然后修改它。事实上,你甚至不需要迭代数组,因为......
太多"你知道"
你的逻辑有点偏。对于一个N字的句子,你注入"你知道"恰好N次;只有你想要一个"你才知道"每个字。如果要插入每4个单词,则需要插入N / 4次。你需要的是简单地插入,而不是在句子结束时离开:
var k = 3;
var phrase = "you know";
var sentence = prompt("Enter a sentence: ");
sentence = sentence.split(" ");
while (k <= sentence.length) {
sentence.splice(k, 0, phrase);
k += 4;
}
sentence = sentence.join(" ");
alert(sentence);
答案 1 :(得分:0)
请参阅下面的for
循环,该循环从第三个单词开始,每次迭代增加三个单词(加上我们刚刚插入的短语),在句子末尾停止:
var phrase = "you know";
var sentence = "This is a sentence with a bunch of words in it."; // test data instead of prompt
var words = sentence.split(" ");
for (var i = 3; i <= words.length; i += 4) {
words.splice(i, 0, phrase);
}
console.log(words.join(" ")); // instead of alert
&#13;
您的代码的问题是您的循环执行n
次,其中n
是句子中的单词数。当break
离开句子末尾时,你可以通过k
修复你的循环,但只是构建一个更好的for
循环更简单。
答案 2 :(得分:0)
你去吧
var sentence = prompt("Enter a sentence: ");
sentence = sentence.split(" ");
var newSentence = [];
for(var i = 0;i<sentence.length;i++){
if(i!=0 && i%3==0 && i<(sentence.length-1)){
newSentence.push("you know");
}
newSentence.push(sentence[i]);
}
sentence = newSentence.join(" ");