Практические задачи с собеседований
Функция проверки палиндрома:
// Base
function isPalindrome ( str ) {
var arr = str . split ( '' ) ;
var reverseArr = arr . reverse ( ) ;
var resString = reverseArr . join ( '' ) ;
var res = str === resString ;
return res ;
}
// Advanced
function isPalindrome ( str ) {
return str === str . split ( '' ) . reverse ( ) . join ( '' ) ;
}
// ES6
const isPalindrome = str =>
str === str . split ( '' ) . reverse ( ) . join ( '' ) ;
// Result:
isPalindrome ( 'тест' ) ; // false
isPalindrome ( 'шалаш' ) ; // true
Функция поиска самого короткого слова:
// Base
function findShort ( string ) {
var wordsArr = string . split ( ' ' ) ;
var sortedWordsArr = wordsArr . sort ( function ( a , b ) {
return a . length - b . length ;
} ) ;
return sortedWordsArr [ 0 ] ;
}
// Advanced
function findShort ( string ) {
return string
. split ( ' ' )
. sort ( function ( a , b ) { return a . length - b . length ; } ) [ 0 ] ;
}
// ES6
const findShort = string =>
string
. split ( ' ' )
. sort ( ( a , b ) => a . length - b . length ) [ 0 ] ;
// Resut:
findShort ( 'The Smallest word in sentence' ) ; // 'in'
findShort ( 'Just test string' ) ; // 'Just'
Функция создания инициалов:
// Base
function toInitials ( name ) {
var nameArr = name . split ( ' ' ) ;
var firsLettersArr = nameArr . map ( function ( el ) {
return el . slice ( 0 , 1 ) . toUpperCase ( ) + '.' ;
} ) ;
var initials = firsLettersArr . join ( '' ) ;
return initials ;
}
// Advanced
function toInitials ( name ) {
return name
. split ( ' ' )
. map ( function ( el ) {
return el . slice ( 0 , 1 ) . toUpperCase ( ) + '.' ;
} )
. join ( '' ) ;
}
// ES6
const toInitials = name =>
name
. split ( ' ' )
. map ( el => `${ el . slice ( 0 , 1 ) . toUpperCase ( ) } .` )
. join ( '' ) ;
// Result:
toInitials ( ‘Bill Gates’ ) ; // 'B.G.'
toInitials ( ‘elon mask’ ) ; // 'E.M.'
Функция суммирования всех цифр числа:
// Base
function sumDigits ( number ) {
var moduleNumber = Math . abs ( number ) ;
var str = moduleNumber . toString ( ) ;
var arr = str . split ( '' ) ;
var res = arr . reduce ( function ( sum , cur ) {
return Number ( sum ) + Number ( cur ) ;
} , 0 ) ;
return res ;
}
// Advanced
function sumDigits ( number ) {
return Math . abs ( number )
. toString ( )
. split ( '' )
. reduce ( function ( sum , cur ) { return + sum + + cur } , 0 ) ;
}
// ES6
const sumDigits = number =>
Math . abs ( number )
. toString ( )
. split ( '' )
. reduce ( ( sum , cur ) => + sum + + cur , 0 ) ;
// Result:
sumDigits ( 99 ) ; // 18
sumDigits ( - 32 ) ; // 5
Функция поиска минимального и максимального значений в массиве:
// Base
function minMax ( arr ) {
var res = [ ] ;
var minValue = Math . min . apply ( null , arr ) ;
var maxValue = Math . max . apply ( null , arr ) ;
return res . push ( minValue , maxValue ) ;
}
// Advanced
function minMax ( arr ) {
return [ Math . min . apply ( null , arr ) , Math . max . apply ( null , arr ) ] ;
}
// ES6
const minMax = ( arr ) =>
[ Math . min ( ...arr ) , Math . max ( ...arr ) ] ;
// Result:
minMax ( [ 2 , 9 , 10 , 25 , 47 , 4 , 1 ] ) ; // [7, 47]
minMax ( [ 2 , 1 ] ) ; // [1, 2]
minMax ( [ 1 ] ) ; // [1, 1]
Функция создания набора дубликатов символов строки:
// Base
function accum ( string ) {
var arr = string . toUpperCase ( ) . split ( '' ) ;
var repeatArr = arr . map ( function ( el , i ) {
return el += el . repeat ( i ) . toLowerCase ( ) ;
} ) ;
var resString = repeatArr . join ( '-' ) ;
return resString ;
}
// Advanced
function accum ( string ) {
return string . toUpperCase ( ) . split ( '' ) . map (
function ( el , i ) {
return el += el . repeat ( i ) . toLowerCase ( ) ;
}
) . join ( '-' ) ;
}
// ES6
const accum = ( string ) =>
string
. toUpperCase ( )
. split ( '' )
. map ( ( el , i ) => `${ el } ${ el . repeat ( i ) . toLowerCase ( ) } ` ) . join ( '-' ) ;
// Result:
accum ( "abcd" ) // "A-Bb-Ccc-Dddd"
accum ( "cwAt" ) // "C-Ww-Aaa-Tttt"
Функция возврата индексов заглавных букв строки:
// Base
function capitals ( word ) {
var bigLetters = word . toUpperCase ( ) . split ( '' ) ;
var smallLetters = word . split ( '' ) ;
var res = [ ] ;
for ( var i = 0 ; i < word . length ; i ++ ) {
if ( smallLetters [ i ] === bigLetters [ i ] ) {
res . push ( i ) ;
}
}
return res ;
} ;
// Advanced
function capitals ( word ) {
var res = [ ] ;
word . split ( '' ) . forEach ( function ( letter , index ) {
if ( letter === letter . toUpperCase ( ) ) {
res . push ( index ) ;
}
} ) ;
return res ;
} ;
// ES6:
const capitals = ( word ) =>
word . split ( '' ) . reduce ( ( result , letter , index ) => {
if ( letter === letter . toUpperCase ( ) ) {
result . push ( index ) ;
}
return result ;
} , [ ] ) ;
// Result:
capitals ( 'CodEWaRs' ) ; // [0, 3, 4, 6]
capitals ( 'justForTest' ) ; // [4, 7]
Функция вывода чисел от 1 до n (n - передаваемый аргумент):
выводить foo
вместо чисел, кратных 3;
выводить bar
вместо чисел, кратных 5;
выводить foobar
вместо чисел, кратных и 3, и 5.
// Base
const fooBar = num => {
for ( let i = 1 ; i <= num ; i ++ ) {
if ( i % 3 === 0 && i % 5 === 0 ) {
// multiple of 3 and 5
console . log ( 'foobar' ) ;
} else if ( i % 3 === 0 ) {
// multiple of 3
console . log ( 'foo' ) ;
} else if ( i % 5 === 0 ) {
// multiple 5
console . log ( 'bar' ) ;
} else {
// other numbers
console . log ( i ) ;
}
}
} ;
Функция возврата уникальных значений из нескольких массивов:
// Base
function uniteUnique ( ) {
const arr = [ ...arguments ] ;
let newArr = [ ] ;
for ( var i = 0 ; i < arr . length ; i ++ ) {
newArr . push ( ...arr [ i ] ) ;
}
newArr = new Set ( newArr ) ;
return [ ...newArr ] ;
}
// Advanced
function uniteUnique ( ) {
return [ ...new Set ( [ ...arguments ] . flat ( ) ) ] ;
}
// Result:
uniteUnique ( [ 1 , 2 , 3 ] , [ 4 , 1 , 5 ] , [ 6 , 7 , 8 , 5 ] ) ; // [1, 2, 3, 4, 5, 6, 7, 8]
uniteUnique ( [ 1 ] , [ 2 ] , [ 3 , 2 , 2 ] , [ 4 , 1 , 1 , 2 ] ) ; // [1, 2, 3, 4]
Функция форматирования цифр в телефонный номер:
// Base
function createPhoneNumber ( number ) {
let numArr = number . toString ( ) . split ( '' ) ;
numArr . splice ( 0 , 0 , '(' ) ;
numArr . splice ( 4 , 0 , ')' ) ;
numArr . splice ( 5 , 0 , ' ' ) ;
numArr . splice ( 9 , 0 , '-' ) ;
return numArr . join ( '' ) ;
}
// Advanced
const createPhoneNumber = ( number ) => {
const strNum = number . toString ( ) ;
// template pattern: (xxx) xxx-xxx
return `(${ strNum . slice ( 0 , 3 ) } ) ${ strNum . slice ( 3 , 6 ) } -${ strNum . slice ( 6 , 9 ) } ` ;
}
// Result:
createPhoneNumber ( 123456789 ) ; // "(123) 456-789"
createPhoneNumber ( 555095611 ) ; // "(555) 095-611"
Функция поиска гласных букв в строке:
// Base
const findVowels = ( str ) => {
const vowels = [ 'a' , 'e' , 'i' , 'o' , 'u' ] ;
let count = 0 ;
for ( let char of str . toLowerCase ( ) ) {
if ( vowels . includes ( char ) ) {
count ++ ;
}
}
return count ;
}
// Advanced
const findVowels = ( str ) => {
const matches = str . match ( / [ a e i o u ] / gi) ;
return matches ? matches . length : 0 ;
}
// Result:
findVowels ( 'hello' ) ; // 2
findVowels ( 'hello world' ) ; // 3
Функция трансформации букв в заглавный регистр:
// Base
function toCapitalCase1 ( str ) {
const arr = str . split ( ' ' ) ;
const resArr = [ ] ;
for ( let i = 0 ; i < arr . length ; i ++ ) {
resArr . push ( arr [ i ] [ 0 ] . toUpperCase ( ) + arr [ i ] . slice ( 1 ) ) ;
}
return resArr . join ( ' ' ) ;
}
// Advanced
const toCapitalCase = ( str ) =>
str
. split ( ' ' )
. map ( ( word ) => `${ word [ 0 ] . toUpperCase ( ) } ${ word . slice ( 1 ) } ` )
. join ( ' ' ) ;
// Result:
toCapitalCase ( 'Lorem ipsum is simply dummy text of the printing, typesetting' ) ; // "Lorem Ipsum Is Simply Dummy Text Of The Printing, Typesetting"