用第一次出现的索引替换文本中的单词

时间:2017-02-12 12:51:26

标签: javascript list items

我必须创建一个可以使用

等句子的程序
my arms are red, my legs are red and I am red

并输出带有句子中第一次出现的索引的句子,因此该句子的所需输出将是

12341634910114 

我不知道我会怎么做。

由于

4 个答案:

答案 0 :(得分:1)

这是一个想法:

  1. 你必须将句子分解为单词。破发点可能是SPACE,COMMA,NEW LINE等等

  2. 您可以创建2个数组。第一个包含所有单词,第二个包含唯一单词。

  3. 通过循环运行两个数组,将它们与第一次出现的单词进行比较并保存其索引

答案 1 :(得分:0)

这是一种方法。

  • 我认为你不想要标点符号,所以我删除了它们。
  • 然后我创建了一个key=wordvalue=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查找出现次数来查找出现次数。

同样的事情可以用很多不同的方式完成,例如使用简单的循环。

&#13;
&#13;
Array.filter
&#13;
&#13;
&#13;