Javascript 如何使用数组和for循环解决此问题?
我有一个字符串,比如“你好,我叫詹姆斯,你叫什么名字,你叫什么名字” 它应该输出“你好,我的名字是詹姆斯,你的名字是什么3 6 7 4 8 3”Javascript 如何使用数组和for循环解决此问题?,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我有一个字符串,比如“你好,我叫詹姆斯,你叫什么名字,你叫什么名字” 它应该输出“你好,我的名字是詹姆斯,你的名字是什么3 6 7 4 8 3” 所以基本上,如果单词被重复,那么它们就会被替换为第一个单词出现的位置。例如,如果句子是“the house is best”,它会将重复出现的单词“the”替换为第一个“the”出现的位置。因此,它应该输出“房子是1个最好的”首先,要在每个空间拆分字符串。您可以使用split方法执行此操作 var sentence = "hello my name i
所以基本上,如果单词被重复,那么它们就会被替换为第一个单词出现的位置。例如,如果句子是“the house is best”,它会将重复出现的单词“the”替换为第一个“the”出现的位置。因此,它应该输出“房子是1个最好的”首先,要在每个空间拆分字符串。您可以使用
split
方法执行此操作
var sentence = "hello my name is James and what is your name and what is your name";
var words = sentence.split(" ");
var newSentence = words.join(" ");
然后您需要两个嵌套的for
循环。第一个检查每个单词,第二个检查前面的每个单词。如果它们是一样的,那就是
for (var i = 0; i < words.length; i++) {
for (var j = 0; j < i; j++) {
if (words[i] == words[j]) {
words[i] = j + 1;
break;
}
}
}
如果有标点符号或大写字母,此方法将无法正常工作。可以使用原始字符串上的
toLowerCase
方法固定大写字母。标点符号会更复杂,如果你给我一些时间的话,我会弄清楚的。使用reduce
最简单:
函数解析(str){
找到的变量={},
指数=0;
返回str
.拆分(“”)
.reduce((prev,el)=>{
如果(!found[el]){
发现[el]=索引;
上推(el)
}否则{
上推(找到[el])
}
索引++;
返回上一个;
},[])。加入(“”);
}
log(parse('Hellow my friend this not this not this not working with大写this my Hellow')代码>请给我们一个可靠的示例和正确的预期输出。如果你希望得到高质量的答案,你的帖子质量就需要提高。谢谢你试过了吗?我给的字符串是“你今天怎么样,明天有空吗?”所以它应该返回“你今天怎么样,明天有空吗?”我试过使用循环并拆分字符串。但在那之后,我不知道如何比较if和else语句,我陷入了困境。StackOverflow不是一个让人们为你做作业的地方。“这很有帮助,非常感谢”