На прошлой неделе у меня было техническое собеседование для компании, где они дали мне посмотреть простые вопросы для меня, чтобы я кодировал, чтобы показать им мой мыслительный процесс при кодировании, поэтому я решил поделиться своим опытом.
Мне дали строку, и я должен был выполнить над ней несколько функций:
const string = "lorem ipsum dolor sit amet consectetur lorem ipsum et mihi quoniam et adipiscing elit.sed quoniam et advesperascit et mihi ad villam revertendum est nunc quidem hactenus ex rebus enim timiditas non ex vocabulis nascitur.nummus in croesi divitiis obscuratur pars est tamen divitiarum.nam quibus rebus efficiuntur voluptates eae non sunt in potestate sapientis."
Сколько слов?
Первый вопрос заключался в том, чтобы узнать, сколько слов в жале. Моя первоначальная мысль состояла в том, чтобы подать в суд на встроенный.split(' ‘)
метод JavaScript, чтобы создать новый массив с отдельными словами, а затем использовать .length
для подсчета количества элементов в массиве, которые будут равны количеству слов:
const numberOfWords = (words) => { let arr = words.split(' ').length; console.log(arr); };
Однако, если вы внимательно посмотрите на строку, которую они мне дали, вы увидите, что некоторые слова разделены точками. Я предположил, что для того, чтобы эта функция работала с любой строкой, ей также потребуется разбить массив на любые знаки препинания и пробелы, поэтому я использовал регулярное выражение (регулярное выражение JavaScript) для решения этой проблемы:
const numberOfWords = (words) => { let arr = words.split(/\W+/).length; console.log(arr); };
Сколько слов с более чем 5 букв?
Итак, в этом вопросе я решил сохранить регулярное выражение, которое использовал раньше, чтобы разбить строку на массив слов. Тогда моей первой идеей было создать новый массив, сопоставить массив слов и поместить слова, содержащие более 5 букв, в новый массив. Помните, что вы можете увидеть, сколько букв в строке, используя .length
.
const moreThanFive = (words) => { let arr = words.split(/\W+/); let arr2 = []; arr.map((word) => { if (word.length > 5) { arr2.push(word); } }); console.log(arr2.length); };
И это решение работает. Однако, оглядываясь на это сейчас, я понимаю, что было бы проще просто использовать .filter().
Есть много разных способов ответить на эти вопросы, и ни один ответ не лучше другого, поэтому не паникуйте!
Найдите самые длинные 5 слов
В этом вопросе мне нужно было пройтись по массиву и найти 5 самых длинных слов. Здесь я знал, что могу использовать функцию .sort()
JavaScript, но мне нужно было проверить, как ее использовать. К счастью, интервьюеры были рады, что я использую Google, пока я могу объяснить им результат своего поиска (а не просто скопировать и вставить!).
Таким образом, .sort()
будет сортировать массив в алфавитном порядке или в порядке возрастания, если по умолчанию это число, но вы также можете отсортировать массив по своему усмотрению, включив функцию сравнения в параметры с двумя параметрами для сравнения, firstEl и secondEl. Я использовал MDN, чтобы узнать больше об этой функции. Вот мое окончательное решение:
const longestFive = (words) => { let arr = words.split(/\W+/); let arr2 = arr.sort(function (a, b) { return b.length - a.length; }); console.log(arr2.slice(0, 5)); }
Найдите среднюю длину слова
И последний вопрос! Этот вопрос был определенно проще, чем предыдущий, поэтому я чувствовал себя вполне уверенно, объясняя себя! Используя код из предыдущих вопросов, я разделил строку с помощью регулярного выражения, а затем сопоставил этот массив, чтобы получить массив длин слов.
Затем я использовал .reduce()
, который мне пришлось снова быстро гуглить, как использовать MDN! Для этого требуется функция аккумулятора и начальное значение в качестве параметров, а затем вы можете добавить текущее значение в аккумулятор, чтобы сложить все элементы массива вместе.
Затем я разделил уменьшенный массив на длину массива до того, как он был уменьшен, чтобы найти среднее значение:
const averageLength = (words) => { let arr = words.split(/\W+/); let arr2 = arr.map((word) => word.length); let reduced = arr2.reduce((total, current) => total + current, 0) let average = reduced / arr2.length; console.log(average); };
И у нас есть! Обсуждение кода завершено! Если бы я мог что-то изменить в том, как это происходило, я бы создал в начале функцию для разделения строки с помощью регулярного выражения, потому что я использовал это для каждого вопроса, поэтому он был довольно повторяющимся.