for循环未正确执行Javascript

for loop not executing properly Javascript

本文关键字:执行 Javascript 循环 for      更新时间:2023-09-26

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

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。我只想用香草。

因为i是一个全局变量。因此,当它进入函数权重时,它将i的值设置为大于l的长度。使用var,这不是可选的。

for(var i=0;i<l.length;i++)

for(var i=0;i<w.length;i++)

应该将var与函数中的其他变量一起使用,并且应该使用分号。

我认为您的问题只是JavaScript格式错误。请记住,JavaScript很糟糕,而且不像其他一些语言那样宽容。

只需添加几个"var"和分号,我就可以使用您所拥有的内容。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);

希望对有所帮助