Acronym generator in javascript. It only grabs the first letter of the first word, but the not the other words
Am I missing something in my code? It s开发者_StackOverflow中文版eems to only grab the first letter, and the while loop, doesn't go onto the next word. So what could I be missing?
function acr(s){
    var words, acronym, nextWord;
    words = s.split();
    acronym= "";
    index = 0
    while (index<words.length) {
            nextWord = words[index];
            acronym = acronym + nextWord.charAt(0);
            index = index + 1 ;
    }
    return acronym
}
If you only care about IE9+ then the answer can be made shorter:
function acronym(text) {
  return text
    .split(/\s/)
    .reduce(function(accumulator, word) {
      return accumulator + word.charAt(0);
    }, '');
}
console.log(acronym('three letter acronym'));If you can use arrow functions then it can be made shorter still:
function acronym(text) {
  return text
    .split(/\s/)
    .reduce((accumulator, word) => accumulator + word.charAt(0), '');
}
console.log(acronym('three letter acronym'));Add the separator to the split:
function acr(s){
    var words, acronym, nextWord;
    words = s.split(' ');
    acronym= "";
    index = 0
    while (index<words.length) {
            nextWord = words[index];
            acronym = acronym + nextWord.charAt(0);
            index = index + 1 ;
    }
    return acronym
}
JS Fiddle demo;
Revised the above to make it a little more demonstrative, and also interactive: JS Fiddle demo.
Edited to add references and explanation:
Because no separator was supplied the string remains un-split; therefore the while was operating correctly (as words.length is equal to 1), and so returns only the first letter of the string:
[Separator] specifies the character to use for separating the string. The separator is treated as a string or a regular expression. If separator is omitted, the array returned contains one element consisting of the entire string.
Reference:
- split(), at MDC Docs
You forgot to split on whitespace:
words = s.split(/\s/);
You can have this in even lesser code. Try this
s.match(/\b(\w)/g).join("").toUpperCase()
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论