如何正确警告数组/ for循环中的项目?

时间:2017-10-05 18:06:15

标签: javascript arrays for-loop alert

我正在做一个项目,将一个简单的句子转换成一个“青少年”会说的陈述。我想在用户输入的句子中的每三个单词之后添加“你知道”这个短语。当我在最后打印转换后的句子时,似乎每个人都有一个额外的'你知道'。我的数组中的项目(或单词)。我怎么会在最后失去所有额外的'你知道'?或者我该如何防止这种情况发生?这是我的代码:

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

3 个答案:

答案 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循环,该循环从第三个单词开始,每次迭代增加三个单词(加上我们刚刚插入的短语),在句子末尾停止:

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