for循环没有正确执行Javascript

时间:2014-04-29 20:09:19

标签: javascript arrays for-loop

我试图使用以下函数计算字符串的权重

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。

2 个答案:

答案 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);

希望有所帮助