При собеседовании в одной весьма и весьма крупной российской IT компании, интервьюеры задавали мне каверзные вопросы по JavaScript. Если на алгоритмические вопросы я отвечал без проблем, то на вопросах, связанных с нативными методами в JavaScript троках ответить я не смог. Просто потому, что привык везде и всегда гуглить необходимую информацию. и если мне понадобилось разбить в JavaScript строку на части, то я сразу гуглю
Разбить строку в JS |
Возможно вы знаете ответ, как это делать, но лишней, информация, которую я изложу ниже точно не будет. Как работать со строками, как работать с массивами, как объединять строки и массивы?
Для начала ответим на вопрос выше. Как разбить строку на части, по какому либо признаку? У строк я JavaScript есть метод split
Если вы знакомы с php, то там есть некие аналоги explode и preg_split. Их в php две потому, что String.prototype.split может принимать, как строки, так и регулярные выражения, как и эти две функции из php соответственно.
Пример: разделить строку на слова, разделенные пробелами
console.log( "мама мыла раму мылом" .split( ' ' )); //['мама','мыла','раму','мылом'] |
на выходе получится массив.
Усложним задачу и предположим, что разделителями могут быть пробелы, знаки препинания, переносы строки и табуляция.
console.log( "мама мыла,раму - мылом" .split(/[\s\r\n,\.\?\-\(\)\*]+/)); //['мама','мыла','раму','мылом'] |
На помощь пришло регулярно выражение.
Чтобы объединить массив обратно в строку, у массивов есть метод join, он аналогичен функции implode в php. Метод упаковывает массив в строку, подобно тому, как это делает упаковочный аппарат слева.
conole.log([ 'мама' , 'мыла' , 'раму' , 'мылом' ].join( ' ' )); //мама мыла раму мылом |
Наиболее частое задание при собеседовании на должность программиста такой: напишите функцию, которая перевернет строку наоборот. То есть
Иван мыл машину -> унишам лым нави |
теперь понятно, как Кемерон придумал свой язык Нави)))
В JavaScript для этого есть все, что нужно. Писать ничего не нужно. Из уже описанного выше, нам потребуется еще метод Array.prototype.reverse и тот факт, что методы String.prototype.split и Array.prototype.join могут иметь пустой аргумент при вызове.
'Иван мыл машину' .split( '' ).reverse().join( '' ) //унишам лым нави |
Читая магия или триумф JavaScript.
Еще одним вопросом в JS был такой: Как удалить элемент из массива?
Вопрос в подоплекой, дело в том, что если взять и сделать так
var a = [1,2,3,4,5]; delete a[2]; |
То размер итогового массива не изменится. Array.prototype.length указывает не на величину массива, а на индекс последнего элемента+1.
Поэтому в примере выше содержание a[2] будет удалено, но сам элемент из массива не исчезнет, а длинна массива останется равной 5.
Тут пригодится метод Array.prototype.splice не путать со (Array.prototype.slice)
var a = [1,2,3,4,5]; a.splice(3,1) // [4] console.log(a); //[1,2,3,5] |
Обратите внимание, что метод возвращает другой массив - массив удаленных элементов.
Метод Array.prototype.slice, как несложно догадаться режет массив на части. Я не буду его описывать.