2012-01-23 59 views
3

我有我移植爲Javascript一些Python代碼:這個Javascript怎麼能更簡潔地表達?

word_groups = defaultdict(set) 
for sentence in sentences: 
    sentence.tokens = stemmed_words(sentence.str_) 
    for token in sentence.tokens: 
     word_groups[sentence.actual_val].add(token) 

我不知道了很多關於JavaScript,因此這是最好的,我可以這樣做:

var word_groups = {} 
for(var isent = 0; isent < sentences.length; isent++) { 
    var sentence = sentences[isent] 
    sentence.tokens = stemmed_words(sentence.str_) 
    for(var itoken = 0; itoken < sentence.tokens.length; itoken++) { 
     var token = sentence.tokens[itoken] 
     if(!(sentence.actual_val in word_groups)) 
      word_groups[sentence.actual_val] = [] 
     var group = word_groups[sentence.actual_val] 
     if(!(token in group)) 
      group.push(token) 
    } 
} 

任何人都可以建議如何讓JavaScript代碼更像Python?

+2

可能屬於上[codereview.stackexchange](http://codereview.stackexchange.com/)。 –

+3

你能讓英文看起來更像中文嗎? – epascarello

+2

@epascarello,雖然我理解你的問題的重點,但問如何以更簡潔的方式表示JS代碼是一個很好的問題。 – zzzzBov

回答

1

我打算假設如果您使用的環境有forEach可用,reduceObject.keys也可用。 (例如ECMAScript的> = 1.8.5):

var word_groups = sentences.reduce(function (groups, sentence) { 
    var val = sentence.actual_val 
    var group = groups[val] = groups[val] || [] 
    stemmed_words(sentence.str_).forEach(function (t) { 
    if (!(t in group)) group.push(t) 
    }) 
    return groups 
}, {}) 
+0

很酷。謝謝。 –

1

這很可能是我誤解你的Python代碼做了什麼,但假設你字數後的時候,我想如下寫:

var word_groups = {} 
sentences.forEach(function (sentence) { 
    sentence.tokens = stemmed_words(sentence.str_) 
    sentence.tokens.forEach(function (token) { 
    var val = sentence.actual_val 
    word_groups[val] = (word_groups[val] || 0) + 1 
    }) 
}) 

以上將失敗應該單詞「構造函數「出現在輸入中。這是可能的解決這個JavaScript怪癖:

var word_groups = {} 
sentences.forEach(function (sentence) { 
    sentence.tokens = stemmed_words(sentence.str_) 
    sentence.tokens.forEach(function (token) { 
    var val = sentence.actual_val 
    if (!word_groups.hasOwnProperty(val)) word_groups[val] = 0 
    word_groups[val] += 1 
    }) 
}) 
+0

沒有字數統計。每個句子都有一個值(1,2或3),並且我想將每個句子中的唯一單詞用相同的值分組。所以基本上,如果一組值爲3的句子是['foo bar','foo baz','bar baz ball'],那麼word_groups [3] == ['foo','bar','巴茲','球'] –

+0

forEach雖然看起來不錯。感謝那。 –

0

如果你絕對不是在Javascript 1.6或更高版本(IE顯着8有1.5的JavaScript),你可能想要的jQuery作爲一個兼容層。例如$ .each(a,f)與a.forEach(f)兼容。