我试图使用以下函数计算字符串的权重
function weight(w)
{
Cap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
small = 'abcdefghijklmnopqrstuvwxyz'
spcl = "~!@#$%^&*()_+[]\{}|;':,./<>?"
num = '0123456789'
var p = []
for(i=0;i<w.length;i++)
{
if(Cap.contains(w[i])==true)
p[i] = Cap.indexOf(w[i]) + 2
else if(small.contains(w[i])==true)
p[i] = small.indexOf(w[i]) + 1
else if(num.contains(w[i]))
p[i] = num.indexOf(w[i])
else if(spcl.contains(w[i]))
p[i] = 1
}
return _.reduce(p,function(memo, num){ return memo + num; }, 0);
}
其中w是一个字符串。这可以正确计算字符串的重量。 但是当我试图计算一个数组中给出的字符串的权重时,它会计算第一个元素的权重,即。它不会运行完整的for循环。任何人都可以向我解释为什么会如此?
for循环如下所示
function weightList(l)
{
weigh = []
for(i=0;i<l.length;i++)
weigh.push(weight(l[i]));
return weigh;
}
输入和输出:
>>> q = ['abad','rewfd']
["abad", "rewfd"]
>>> weightList(q)
[8]
而输出数组应该有2个条目。
[8,56]
我不想使用Jquery。我只想使用Vanilla。
答案 0 :(得分:1)
因为i
是一个全局变量。因此,当它进入函数权重时,它将i的值设置为大于l的长度。使用var
,它不是可选的。
for(var i=0;i<l.length;i++)
和
for(var i=0;i<w.length;i++)
你应该将var与函数中的其他变量一起使用,你应该使用分号。
答案 1 :(得分:0)
我认为您的问题只是格式错误的JavaScript。请记住,JavaScript很糟糕,并不像其他语言那样宽容。
只需添加一些&#34; var&#34;和分号,我能够让它与你拥有的东西一起工作。 http://jsfiddle.net/3D5Br/
function weight(w) {
var Cap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
small = 'abcdefghijklmnopqrstuvwxyz',
spcl = "~!@#$%^&*()_+[]\{}|;':,./<>?",
num = '0123456789',
p = [];
for(var i=0;i<w.length;i++){
if(Cap.contains(w[i])==true)
p[i] = Cap.indexOf(w[i]) + 2
else if(small.contains(w[i])==true)
p[i] = small.indexOf(w[i]) + 1
else if(num.contains(w[i]))
p[i] = num.indexOf(w[i])
else if(spcl.contains(w[i]))
p[i] = 1
}
return _.reduce(p,function(memo, num){ return memo + num; }, 0);
}
function weightList(l) {
var weigh = [];
for(var i=0;i<l.length;i++)
weigh.push(weight(l[i]));
return weigh;
}
q = ['abad','rewfd'];
results = weightList(q);
希望有所帮助