简体   繁体   中英

JavaScript variable output 1 but supposed to be 5

I've made a function and it checks a string for underscores and it adds to the variable "letter" each time it finds an underscore and I made a string with 5 but it only outputs 1.

 const test = function(words) { var letter = 1; for (var i in words) { if ("_" == i) { letter++; if (letter > 26) { letter = 1; } } } console.log(letter); } var word = "_____"; test(word); 

i in words <- this is used to access the indexes, inside if use as words[i]

correct code -

const test = function(words) {
    var letter = 1;
    for (var i in words) {
        if ("_" == words[i]) {
            letter++;
            if (letter > 26) {
                letter = 1;
            }
         }
    }
    console.log(letter);
}

var word = "_____";
test(word);

You have to use a for of loop instead of a for in loop, because it only gives you the index not the value.

const test = function(words) {
  var letter = 1;
  for (var i of words) {
    if ("_" == i) {
      letter++;
      if (letter > 26) {
        letter = 1;
      }
    }
  }
  console.log(letter);
}

var word = "_____";
test(word);

Update

If for some reason, you're not using a transpiler like babel and still want this to support in IE, you can use the following snippet:

const test = function(words) {
    var letter = 1;
    for (var i in words) {
        if ("_" == words[i]) {
            letter++;
            if (letter > 26) {
                letter = 1;
            }
         }
    }
    console.log(letter);
}

here is your fixed code first letter i start from 0 and o add words.charAt(i)

 const test = function(words) { var letter = 0; for (var i in words) { if ("_" == words.charAt(i)) { letter++; if (letter > 26) { letter = 1; } } } console.log(letter); } var word = "_____"; test(word); 

This should be work as you expect.

 const test = function(words) { var letter = 0; for (var i in words) { if ("_" == words[i]) { letter++; if (letter > 26) { letter = 1; } } } console.log(letter); } var word = "_____"; test(word); 

Your code seems wrong to me . You can check the below code :

const test = function(words) {
  var letter = 1;
  for (var i=0;i<words.length;i++) {
     console.log(words.charAt(i));
    if ("_" == words.charAt(i)) {
      letter++;
      if (letter > 26) {
        letter = 1;
      }
    }
  }
  console.log(letter);
}

I think condition 'letter > 26' might set letter back to 1.

 const test = function(words) { var letter = 1; for (var i in words) { if ("_" == words.charAt(i)) { letter++; if (letter > 26) { letter = 1; } } } console.log(letter); } var word = "_____"; test(word); 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM