我必须创建一个可以使用
等句子的程序my arms are red, my legs are red and I am red
并输出带有句子中第一次出现的索引的句子,因此该句子的所需输出将是
12341634910114
我不知道我会怎么做。
由于
答案 0 :(得分:1)
这是一个想法:
你必须将句子分解为单词。破发点可能是SPACE,COMMA,NEW LINE等等
您可以创建2个数组。第一个包含所有单词,第二个包含唯一单词。
通过循环运行两个数组,将它们与第一次出现的单词进行比较并保存其索引
答案 1 :(得分:0)
这是一种方法。
key=word
和value=first
出现的地图。
var text = "my arms are red, my legs are red and i am red";
// remove punctuation
text = text.replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"");
// split text
var words = text.split(" ");
// create map of word and first index
var m = new Map();
var i = 1;
words.forEach(function(word) {
// first occurrence?
if (m.get(word) == undefined) {
m.set(word, i++);
}
});
// replace words with index
var l = [];
words.forEach(function(word) {
l.push(m.get(word));
});
console.log(l.join(""));
肯定有更短的方法可以做到这一点,但我认为这更容易阅读和理解
答案 2 :(得分:0)
你的问题出了问题。如果重复一个单词,则应填写索引。 所以索引应该是 12341634910114(123416349,10,11,4)
var str="my arms are red, my legs are red and i am red";
var words=str.replace(",","").split(" ");
var occur=[];
var pos=[];
//console.log(words.length);
for(var i=0; i< words.length; i++){
if(occur.length==0){
occur.push([words[i],i]);
pos.push(pos.length+1);
}
else{
for(var j=0; j<occur.length; j++){
if(words[i]==occur[j][0]){
pos.push(occur[j][1]+1);
break;
}
}
if(j>=occur.length){ // the loop is not broken
occur.push([words[i],i]);
pos.push(i+1);
}
}
}
console.log(pos.join(""));
//console.log(occur);
//console.log(occur[1][0]);
答案 3 :(得分:0)
以字界user agent stylesheet
使用Array.map将每个单词映射到出现次数。
通过使用.match(/\b(\w+)\b/g)
将数组切片到当前索引并使用该切片数组上的Array.slice
查找出现次数来查找出现次数。
同样的事情可以用很多不同的方式完成,例如使用简单的循环。
Array.filter
&#13;