Home > Software engineering >  How to make abbreviations/acronyms in JavaScript?
How to make abbreviations/acronyms in JavaScript?

Time:05-18

new to coding I'm trying to make a function that makes "abbreviations/acronyms" of words, e.g. 'I love you' -> 'ily'. I've tried rewriting the code in many ways but console.log only shows me the first letter of the first given word.

function makeAbbr(words) {
  let abbrev = words[0];
  let after = 0;
  let i = 0;
  for (const letter of words) {
    if (letter === '') {
      i = words.indexOf('', after);
      abbrev  = words[i   1];
    }
    after  ;
  }
  return abbrev;
}
const words = 'a bc def';
let result = makeAbbr(words);
console.log(result)

CodePudding user response:

Since you wanted something using your approach, try this (code is commented)

function makeAbbr(words) {
  let abbrev = "";
  for (let i = 0; i < words.length - 1; i  ) { // Loop through every character except the last one
    if (i == 0 && words[i] != " ") { // Add the first character
      abbrev  = words[i];
    } else if (words[i] == " " && words[i   1] != " ") { // If current character is space and next character isn't
      abbrev  = words[i   1];
    }
  }
  return abbrev.toLowerCase();
}
const words = 'a bc def';
let result = makeAbbr(words);
console.log(result)

CodePudding user response:

here is my implementation of your function: Split the sentence into an array, get the first letter of each word and join them into one string.

const makeAbbr = string => string.split(' ').map(word => word[0]).join('');

console.log(makeAbbr('stack overflow'));
console.log(makeAbbr('i love you'));

`

CodePudding user response:

If you want to use your approach exactly, you had a typo on the line specified. A character can never be "" (an empty string), but a character can be a space " ". Fixing this typo makes your solution work.

function makeAbbr(words) {
  let abbrev = words[0];
  let after = 0;
  let i = 0;
  for (const letter of words) {
    if (letter === ' ') { // This line here
      i = words.indexOf(' ', after);
      abbrev  = words[i   1];
    }
    after  ;
  }
  return abbrev.toLowerCase(); // Also added .toLowerCase()
}
const words = 'a bc def';
let result = makeAbbr(words);
console.log(result)

CodePudding user response:

Without using arrays. But you really should learn about them.

  1. Start by trimming leading and trailing whitespace.
  2. Add the first character to your acronym.
  3. Loop over the rest of the string and add the current character to the acronym if the previous character was a space (and the current character isn't). Without using arrays. But you really should learn about them.

Start by trimming leading and trailing whitespace. Add the first character to your acronym. Loop over the rest of the string and add the current character to the acronym if the previous character was a space (and the current character isn't).

function makeAbbr(words) {
  words = words.trim();
  const length = words.length;
  let acronym = words[0];

  for(let i = 1; i < length; i  ) {
    if(words[i - 1] === ' ' && words[i] !== ' ') {
       acronym  = words[i];
    }
  }

  return acronym;
}
console.log(makeAbbr('I love you'));
console.log(makeAbbr('I     love     you'));
console.log(makeAbbr('   I    love    you   '));


And here's the version for GottZ

function w(code) {
  const i = code & 95;
  return i >= 65 && i <= 90;
}

function makeAbbr(words) {
  words = words.trim();
  const length = words.length;
  if(!length) return '';

  let acronym = words[0];

  for(let i = 1; i < length; i  ) {
    if(!w(words.charCodeAt(i - 1)) && w(words.charCodeAt(i))) {
       acronym  = words[i];
    }
  }

  return acronym;
}
console.log(makeAbbr('I love you'));
console.log(makeAbbr('I     love     you'));
console.log(makeAbbr('   I    love    you   '));
console.log(makeAbbr('   \tI ...  ! love \n\r   .you   '));

CodePudding user response:

There are couple of things tripping you up.

  1. let abbrev = words[0]; is just taking the first letter of the word string you passed into the function, and at some point adding something new to it.

  2. for (const letter of words) {...}: for/of statements are used for iterating over arrays, not strings.

Here's a remixed version of your code. It still uses for/of but this time we're creating an array of words from the string and iterating over that instead.

function makeAbbr(str) {

  // Initialise `abbrev`
  let abbrev = '';

  // `split` the string into an array of words
  // using a space as the delimiter
  const words = str.split(' ');

  // Now we can use `for/of` to iterate
  // over the array of words
  for (const word of words) {

    // Now concatenate the lowercase first
    // letter of each word to `abbrev`
    abbrev  = word[0].toLowerCase();
  }

  return abbrev;

}

console.log(makeAbbr('I love you'));
console.log(makeAbbr('One Two Three Four Five'));

  • Related