2013-08-17 20 views
1

如果我有两个字符串像斯普利特和计算字数节点JS

s1 = "This is a foo bar sentence ." 
s2 = "This sentence is similar to a foo bar sentence ." 

我想分割的字符串,以这种格式

x1 = ["This":1,"is":1,"a":1,"bar":1,"sentence":1,"foo":1] 
x2 = ["This":1,"is":1,"a":1,"bar":1,"sentence":2,"similar":1,"to":1,"foo":1] 

它分割字符串文字和将它们计数到一对,其中每个字符串代表一个字,数字代表字符串中该字的计数。

+2

你到目前为止得到了哪些代码?注意:你不能在数组中存储一个值“This”:1,你需要一个双索引数组或者一个关联字典。 – usr2564301

回答

6

删除标点符号,标准化空格,小写字母,在空格处拆分,使用循环将单词出现计入索引对象。

function countWords(sentence) { 
    var index = {}, 
     words = sentence 
       .replace(/[.,?!;()"'-]/g, " ") 
       .replace(/\s+/g, " ") 
       .toLowerCase() 
       .split(" "); 

    words.forEach(function (word) { 
     if (!(index.hasOwnProperty(word))) { 
      index[word] = 0; 
     } 
     index[word]++; 
    }); 

    return index; 
} 
+0

我可以问你多一个问题@Tomalak,如果我有两张地图,我想得到交集“他们之间的常见词”我该怎么做?例如 –

+0

如果我有两个数组,word和temp,每个数组都有单词并且是计数,那么无论计数如何,我如何获得它们之间的交集? –

+6

我已经为您提供了一个银盘上的完整解决方案;这已经超过了我应该做的。这个问题是非常简单的,b)在我之前已经被其他人解决了。你只是不希望看起来很难,因为让别人来做所有的工作是很容易的。表现出一些正派的风格,并自己做一些思考,第二个问题的答案在我的代码中是正确的。 – Tomalak