我有一些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的方法吗?
答案 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
})
})
答案 1 :(得分:1)
我将假设如果您使用的forEach
可用的环境,reduce
和Object.keys
也可用。 (例如ECMAScript&gt; = 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
}, {})
答案 2 :(得分:0)
如果你肯定不是Javascript 1.6或更高版本(值得注意的是IE 8有Javascript 1.5),你可能需要jQuery作为兼容层。例如$ .each(a,f)与a.forEach(f)兼容。