-1

i m trying to calculate weight of a string using the following function

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

}

where w is a string. this properly calculates weight of the string. But whn i try to to calculate weight of strings given in a an array, it jst calculates the weight of the first element, ie. it does not run the full for loop. can anyone explain to me why is that so??

the for loop is as given below

function weightList(l)
{
weigh = []
for(i=0;i<l.length;i++)
weigh.push(weight(l[i]));
return weigh;
}

input and output:

>>> q = ['abad','rewfd']
["abad", "rewfd"]
>>> weightList(q)
[8]

whereas the output array should have had 2 entries.

[8,56]

i do not want to use Jquery. i want to use Vanilla only.

2 Answers 2

1

Because i is a global variable. So when it goes into the function weight it sets the value of i greater than the lenght of l. Use var, it is not optional.

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

and

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

You should be using var with the other variables in the function and you should be using semicolons.

Sign up to request clarification or add additional context in comments.

Comments

0

I think your issue is just malformed JavaScript. Keep in mind that JavaScript sucks, and is not as forgiving as some other languages are.

Just by adding a few "var" and semicolons, I was able to get it to work with what you had. 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);

Hope that helps

1 Comment

Thanks jeremy! It helped. I m not stuck with a different prblm now. My .html file works awesomely in Mozilla, but in chrome it doesnt work, doesnt even twitch a little, any guesses why so???

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.