-
Notifications
You must be signed in to change notification settings - Fork 0
/
stringAbbreviations.js
42 lines (31 loc) · 1.84 KB
/
stringAbbreviations.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// The word i18n is a common abbreviation of internationalization in the developer community, used instead of typing the whole word and trying to spell it correctly. Similarly, a11y is an abbreviation of accessibility.
// Write a function that takes a string and turns any and all "words" (see below) within that string of length 4 or greater into an abbreviation, following these rules:
// A "word" is a sequence of alphabetical characters. By this definition, any other character like a space or hyphen (eg. "elephant-ride") will split up a series of letters into two words (eg. "elephant" and "ride").
// The abbreviated version of the word should have the first letter, then the number of removed characters, then the last letter (eg. "elephant ride" => "e6t r2e").
//abbreviate("elephant-rides are really fun!")
// ^^^^^^^^*^^^^^*^^^*^^^^^^*^^^*
// words (^): "elephant" "rides" "are" "really" "fun"
// 123456 123 1 1234 1
// ignore short words: X X
// abbreviate: "e6t" "r3s" "are" "r4y" "fun"
// all non-word characters (*) remain in place
// "-" " " " " " " "!"
//=== "e6t-r3s are r4y fun!"
function abbreviate(str){
let convertedString = str.split(' ')
let abbreviatedWords = []
for( let words of convertedString ) {
words.length - 1 <= 4 ? abbreviatedWords.push(words)
: abbreviatedWords.push(createAbbreviation(words))
}
return abbreviatedWords.join(' ')
}
function createAbbreviation(word){
return word.includes('-') ?
word.split('-').map(
( sepWord ) => {
return sepWord.charAt(0) + (sepWord.length - 2) + sepWord.charAt(sepWord.length - 1)
}).join('-')
: word.charAt(0) + (word.length - 2)+ word.charAt(word.length - 1)
}
abbreviate("elephant-rides are really fun!") //=== "e6t-r3s are r4y fun!"