Задачи На Собеседовании Junior / Middle Frontend Developer. Массивы в JavaScript.
Разбираем задачи которые часто спрашивают на собеседовании Junior и Middle Frontend Developer. В этом ролике решаем часто задаваемые задачи по массивам в JavaScript. Разбираем разные способы решения задач + некоторые фишки в JavaScript. Напишите в комментариях какие еще вопросы вам задавали на Frontend собеседованиях и как вы с ними справились!
Таймкоды:
00:00 - Сумма элементов массива. №1.
00:51 - Сумма элементов массива. №2.
01:36 - Сумма элементов массива. №3.
02:12 - Максимальный / минимальный элемент массива. №1.
03:10 - Максимальный / минимальный элемент массива. Вариации первого способа.
03:50 - Максимальный / минимальный элемент массива. №2.
04:20 - Максимальный / минимальный элемент массива. №3.
04:46 - Максимальный / минимальный элемент массива. №4.
05:32 - Сортировка массива.
06:52 - Сортировка массива с объектами по их полям (по алфавиту и по возрастанию).
09:50 - Развернуть массив без .reverse().
11:29 -💡Сможешь понять этот код?
12:10 - Отфильтровать falsy значения
Приятного просмотра! Буду благодарен за поддержку в виде комментария и лайка!
👉 Исходный код, чат, воркшопы и поддержка канала: / wisejs
✔️ Если хочешь изучать программирование со мной, не забудь подписаться :)
kzread.info/dron/Oxq.html...
✔️ Мой телеграм канал: t.me/joinchat/RVq-cmt6n1SJRS7Z
#собесесдованиеjavascript #собеседованиеfrontend #массивы #javascript #frontend #array #juniorjavascript #middlejavascript #вопросынасобеседовании
Пікірлер: 183
Домашнее задание: Найти дубликаты (повторяющиеся элементы) в массиве. Решение присылайте в комментарии 👇
@imthebest8000
2 жыл бұрын
uniqueNumbers = new Set(array)
@9mikaela
2 жыл бұрын
@@imthebest8000 это не найдёт дубликаты
@imthebest8000
2 жыл бұрын
@@9mikaela да, я просто не правильно прочёл задание
@eugenedoroshenko7366
2 жыл бұрын
Для числового массива: arrayWithDublicates.sort((x1, x2) => x1 - x2).reduce((acc, next, index, arr) => next === arr[index + 1] ? [...acc, next] : acc, []). Для других типов данных меняем сортировку, которая была подробно рассмотрена в ролике👆
@ArtyomSamsonchik
Жыл бұрын
array.filter( (el, i) => i !== array.lastIndexOf(el) )
Спасибо,Максим,что продолжаете радовать нас отличным контентом,очень крутое видео!
Как раз прохожу собесы сейчас. То, что нужно как раз👌 . Спасибо 😉
Дружище, ты просто машина, я бы сказал - живой калькулятор) Подписка и лайк однозначно!
Классное видео. Интересные примеры. Спасибо
Классный видосик. Гоу теперь про объекты :)
Контент богов! Наконец-то я нашел то, что искал. Сколько не гуглил задачи на массивы, выдаются сразу довольно сложные примеры, на которых разобраться в теме очень сложно. А тут как раз базовые задачи, да еще и с несколькими вариантами решений. Спасибо огромное!
@user-jl8kc2xi5g
6 күн бұрын
покажика эти сложные задачи)попробую их на зубок чтоб отскакивала как таблица умножения
Great job 🔥 Keep on going!
Классный выпуск,большое спасибо! js, reduce, map, filter, sort, pop.
@wisejs
2 жыл бұрын
Спасибо за ключевые слова!
благодарю за момент с сортировкой, на прошлом собесе не смог внятно ответить, а тут вот оно как))
ты крутой! я подписался) нажал лайк, надеюсь у вас будут выходить такие позновательные видео
Сейчас готовлюсь к собесам на новую работу, ставил на паузу и решил всё, НО некоторые твои варианты взорвали мозг) реально круто!
@Yupitrer
Жыл бұрын
Как новая работа?
@dmitriystoyanov933
Жыл бұрын
@@Yupitrerда жестко бывает т.к. компания небольшая и должность размыта.. я типа фронтенд, но так же и бекенд писать приходится, и на AWS колупаться постоянно.. такое..но, бабки платят и хорошо;)
@adamarturov6361
Жыл бұрын
Какие задачи по алгоритмам пригодились для собеса ?
@dmitriystoyanov933
Жыл бұрын
@@adamarturov6361 это год назад уже было, не помню, но может быть что угодно из них.
Полезно ! спасибо !
Класс! Сделай еще задачки с циклами))
@wisejs
2 жыл бұрын
Хорошая идея)
Привет ✌️ Спасибо 🔥👍
спасибо, контент огонь
Отличный видос)
спасибо , продолжай!
👌 буду решать
Для разворачивания массива можно воспользоваться методом массива reduceRight, который работает как обычный, но итерируется с конца массива const reversedArray = array.reduceRight((accum, elem) => { accum.push(elem); return accum; }, []);
@SuperPirks
Жыл бұрын
array.reduceRight((acc, item) => { return [ ...acc, item ] }, []) Пушить в аккумулятор плохая практика
@BOCbMOU
Жыл бұрын
@@SuperPirks в каком месте это плохая практика? Вот клонировать массив на каждой итерации - это действительно плохая практика.
@vjachet
Жыл бұрын
@@SuperPirks лучше acc.concat(item)
привет . спасибо за видео
it's most popular information! thanks
12:00: вторым аргументом назначаем this = наш array. первым аргументом, т.е. в качестве вызываемого колбэка передаем метод массива pop(), который внутри обращается к this т.е. к массиву, у которого вызывается. если я правильно поняла, когда что-то передается в качестве аргумента оно теряет контекст, потому что это вроде как эквивалентно присвоению переменной. поэтому нам нужно передать контекст вторым аргументом
От души
Делюсь опытом, была задача на собеседовании написать функцию для проверки слова на палиндром, там работа и с массивом, и с строкой. Кто не знает, что это такое и как ее решать, советую глянуть.
@zizu2499
9 ай бұрын
А где найти видео не смог найти видео с решением задачи
@user-on4di6lb3j
7 ай бұрын
А чего там решать? Слово в массив, массив развернуть и склеить в слово, результат сравнить с первоначальный словом. Можно с циклом заморочится или рекурсией. Для зарядки ума.
Привет, найти самое редковстречающееся значение в числовом массиве, или сгенерировать n массив, заполненный рандомными числами от min до max)
@wisejs
2 жыл бұрын
Тоже попадалось с рандомными числами
Обычно в продакшене готовые апи юзаешь, Бек уже все отфильтровал )
Перевернуть массив можно и нужно за O(n) и без доппамяти. Нужно в цикле от 0 до length/2 менять местами i-ый элемент с length - 1 - i
прикольный канал, не помню откуда я тебя взял
@wisejs
2 жыл бұрын
🧐
Дз: создать объект где ключом будут значения элементов массива, а значением - количество их повторений и в зависимости от задачи перебрать объект.
@wisejs
2 жыл бұрын
Все так, но вместо объекта лучше Map 😆
Спасибо, array.filter(item => item) тоже сработает
В версиях node до 12, можно обмануть систему, т.к. сорт на малых объемах массива использует сортировку слиянием, мы можем произвести следующиее, a.sort(e=>1), еденицу можно заменить на любое положительное число, оно будет выполнять роль положительного резульятата сравнения элементов слева на право. Если уж идти по тропе шизокода, стоит писать все в круглых скобках, дабы избавиться от ключевых слов, методы вызывать следующим образом - a=[3,4,5,1,2,6], [j,o,i,n]=`join`, eval(a[j+o+i+n]`+`) и многое другое ))))) И решение - a.map(a.pop,[...a]), взято из задачи 3 kyu на CW ))))) У тебя хороший контент по технологиям, но задачки, это совсем другое, все тонкости JS врядли выйдет разобрать, да это и не нужно обычным людям. Ставлю этому видику 7kyu ))))
@wisejs
2 жыл бұрын
Интересно 🧐
@lambdius
2 жыл бұрын
@@wisejs Если человек хочет впечатлить собеседующего, рекомендую провести тутор - как писать код столбиком, по 1 символу в строке ))))
@wisejs
2 жыл бұрын
@@lambdius 😂
09:50 const arrow = [1,2,3,4,5,6,7,9,12] console.log(arrow.sort(() => {return -1})); тоже идеально будет работать
@klash1401
4 ай бұрын
отлично решение, вот его упрощенная запись (без return и фигурных скобок): arrow.sort(() => -1)
Найти максимальный элемент массива через сортировку это гениально
@LuNa-om8ci
4 ай бұрын
Это был сарказм? Просто я новичок и немогу пока точно понять хорошо это или плохо.
@senyashtyak
3 ай бұрын
@@LuNa-om8ci объясню проще: вместо линейной сложности мы используем квадратичную
Можно больше задач по JS c собеседований
не понял про array.filter(boolean) почему работает? Если весь массив передается, почему он возвращает все те что тру ведь boolean === true равно фолс
В предпоследней задаче можно было бы воспользоваться методом sort: const arr = [1, 2, 3, 4, 5, 6, 88]; const reversed = arr.sort((a, b) => { return b - a; }); console.log(reversed);
@PlaymoreDev
Жыл бұрын
не можно, потому что задача развернуть а не отсортировать. вот с таким массивом не будет работать верно: const arr = [1, 22, 3, 4, 5, 6, 88]
а почему, если не использовать деструктуризацию в выражении array.map(array.pop, array), вернет [6,6,5,4,,,] ?
За eval по рукам надо бить))
Есть еще функция Есть еще функция getMaxOfArray ([1, 2, 3])
Привет ) Скажи пожалуйста что за шрифт у тебя в web-storm ? Заранее спасибо )
@wisejs
2 жыл бұрын
Дефолтный, не менял
@kirushaa
2 жыл бұрын
@@wisejs спасибо )
@user-zd6yk9pi1y
2 жыл бұрын
jetbrains mono
лайк за localeCompare
Решение второй задачи, зачем мудрить?)) const max = Math.max(...array); const min = Math.min(...array);
map(callbackFn, thisArg) Array(array.length).fill(null).map([].pop, [...array]); де: Array(array.length).fill(null) - масив будь-яких значень аналогічної довжини [].pop - потрібна сама функція [...array] - масив, з якого на кожному кроці буде забиратися останнє значення. Якщо без ... (деструктиризації), тоді очистить попередній масив array
@vjachet
Жыл бұрын
array.map([].pop, [...array])
const max = arr.toSorted((a, b) => b - a)[0];
Альтернатива для reverse) array.reduceRight((acc, item) => [...acc, item], []) Это когда лень писать for с обратным циклом))
@SerzhNesteruk
3 ай бұрын
Спасибо, что поделились решением! Способ вполне работающий, но у него всё же квадратичная сложность по времени из-за пепесоздания массива на каждой итерации. Можно переписать примерно так: array.reduceRight((acc, item) => (acc.push(item), acc), []) ...или даже решить через map: array.map((_, i, arr) => arr.at(~i))
@andrTaylor
3 ай бұрын
@@SerzhNesteruk с первым вашим решением согласен, да, но второе читается сложновато)) заставляет залезть в доку и чекнуть инфу про тильду и at
8:38 ошибка в строке 23, в if-е должен стоять ===.
Это websrorm ?
Касательно варианта с разворотом массива, можно еще воспользоваться reduceRight. =) arr.reduceRight((p, c) => [...p, c], []);
Задача. Есть четыре массива по 4 цифры, цифры разбросаны, найти максимальное число , и вывести новый массив максимальных чисел.
@wisejs
2 жыл бұрын
Сводится к поиску максимального числа в матрице (насколько я понимаю)
Домашнее задание: Можно использовать new Set... [...new Set(someArray)]
@wisejs
2 жыл бұрын
Не убрать их, а найти :)
В последней задаче зачем в иф делать !! если все что в условии и так приведется в бул значение
eval это прикол конечно, думаю лучше так не делать на собеседовании 😅
const arrey = [1, 2, 3, 4] const xw = arrey.reduce((x, y) => x + y); console.log(xw) это по короче
Стосовно розвертання масиву через map(array.pop, array) функція видаляє останній елемент масиву і повертає його, який в свою чергу записується в результат функції map. А в якості this для метода pop передається array, який скорочується.
Стало интересно и пошел разбираться. С некоторым успехом вроде что-то вышло.😁 Для данной записи: [...ourArr].map(array.pop, ourArr) - array.pop - это мы просто передаем метод массива, аналогично и этой записи: [].pop Метод array.pop удаляет последний элемент массива и возвращает его. Второй агрумент "ourArr" для метода map нужен для того, чтобы именно было что возвращать в новый массив, который создает метод map. Значение для нового элемента массива возвращается на каждой итерации из ourArr, который мы передали для метода [].pop в качестве this. Новый массив [...ourArr] нужен только для того, чтобы было по чему нам итерироваться. Будет аналогично и работать так же для записи: [undefined, undefined, undefined, undefined, undefined].map(array.pop, ourArray) Кажется, что я только запутал.😂
@wisejs
2 жыл бұрын
Ход мыслей верный 🙂
@user-rj6ro3mp1p
2 жыл бұрын
@@wisejs Ну и хорошо значит.😁
@Kaorichvagon
2 жыл бұрын
Array.from( new Array(arr.length) , () => arr.pop() ) в пустой массив той же длины накидываются попнутые значения. Так это выглядит в читаемой реализации, хотя всё равно способ идиотский, так как происходит мутация исходного массива. Еще при этом зачем-то усложнил получением ссылки на метод массива и прокинутым в неё this. Любителей всё усложнять везде же любят)
@SerzhNesteruk
3 ай бұрын
@@Kaorichvagon Здесь, кстати, тоже можно поумничать с Array.prototype.pop и thisArg, но хотя бы сохранив иммутабельность исходного массива: Array.from(arr, [].pop, [...arr]) А учитывая, что вторым аргументом Array.from является mapFn, то можно просто использовать сам метод map: arr.map([].pop, [...arr]) Но можно решить и рациональнее: arr.map((_, i, arr) => arr.at(~i))
Никто не пишет вручную алгоритмы, вместо этого используют lodash, в котором они реализованы
3:11 через sort было бы легче и быстрее сделать как мне кажется
@Goddamn_Right
2 ай бұрын
4:19
а разве нельзя развернуть массив тем же методом sort, только возвращать x2 - x1 вместо x1 - x2?
@kittycat5403
2 жыл бұрын
и в filter просто использовать сам текущий item без boolean
@wisejs
2 жыл бұрын
x2 - x1 - отсортирует по убыванию
@wisejs
2 жыл бұрын
да, так можно, но не особо очевидно как по мне
@user-vu6hn4ul2i
Жыл бұрын
Нет, нельзя. Если массив изначально не сортирован, то такой "разворот" вернёт сортированный.
ну не знаю не знаю, мне и на джуна задачи сложнее попадались
Такой легкотни на собеседовании быть просто не может. Это даже не уровень джуна. Да, задачи тоже на массивы могут быть, но они будут куда сложнее и не такими очевидными, да еще и с особыми требованиями, типа сделать то-то, не используя что-то (например, какие-то стандартные методы) или не используя дополнительную память, либо показать алгоритм с заданной сложностью. В общем, такие задачи могут быть лишь на собеседовании в какой-то сказочной компании. А таковых давно не существует.
каким каким оператором? тренарным? 😂 может тернарным?
Последний пример мутирует предыдущий массив, это плохо)
@wisejs
2 жыл бұрын
Последний пример какой задачи?
@GagikHarutyunyan_dev
2 жыл бұрын
Развернуть массив
@wisejs
2 жыл бұрын
не всегда плохо, зависит от требований
@vjachet
Жыл бұрын
@@wisejs но сначала-то все примеры без мутации что мешало array.map([].pop, [...array]) ? если мутировать оригинальный массив - надо было и с двумя указателями дать пример
тернарным, а не тренарным
просили найти второе и третье максимальное значение массива перебрав его всего один раз
@wisejs
2 жыл бұрын
Как решали? Сортировкой?
@azizoid
2 жыл бұрын
@@wisejs сортировкой делать было нельзя. Поэтому прошелся обычным for-ом. Но и это их не устроило. Сказали мой алгоритм слишком затратный. Это было тюлет 3 назад
@wisejs
2 жыл бұрын
@@azizoid O(n2 если 2 раза перебирал. Хотели, наверное, быстрее.
@plart2006
2 жыл бұрын
@@wisejs простой сортировкой эту задачу не решить, потому что могут быть дубликаты, придется set еще городить, это не рационально upd: зато читабельно, и чаще всего на фронте глубоко пофиг, сколько займет операция с массивом - 3мс или 10мс, а вот разбираться с кодом из кучи циклов нахрен никому не упало
@plart2006
2 жыл бұрын
let max = -Infinity, second = -Infinity, third = -Infinity for (const value of arr) { if (value > max) { [second, max] = [max, value] // save previous max } else if (value second) { second = value // new second biggest third = second // new third biggest } else if (value third) { third = value // new third biggest } } return [second, third]
а нельзя в максимальном или минимальном элементе массива сделать так? const arr = [3, 2, 4, 5, 1] const min = arr.sort()[0] const max = arr.sort()[arr.length - 1]
@user-ui1fe2bd9w
Жыл бұрын
да кнчн
@kindaart7451
Жыл бұрын
Если в массиве будет 100, то max у Вас будет равна 5, что будет ошибкой.
Вопросы на уровне стажёра, на Джуна уж посложнее задачи спрашивают, как минимум, средний уровень с leetcode
@wisejs
2 жыл бұрын
Собеседование довольно стрессовый процесс. И даже, порой простые вопросы и задачи вызывают трудности. Даже на 1 задачу среднего уровня нужно выделять все собеседование, а ведь спросить хочется не только 1 задачу.
ну middle вряд ли
Почему этот парень не моргает а я сразу не понял че не так🤔
Сделать плоский массив, нельзя использовать flat
@pinkiseven659
2 жыл бұрын
А также нельзя использовать рекурсию
@wisejs
2 жыл бұрын
А так же, нельзя использовать массив 😆
@pinkiseven659
2 жыл бұрын
@@wisejs будет тогда сложно
Сомнительно чтобы давали настолько простые задачи на собесе
@plart2006
2 жыл бұрын
Если просят крутить деревья, лучше сразу уйти. Потом такие особи крутят тебе мозги
@McNeelone
2 жыл бұрын
@@plart2006 по подробней можно?
@KrivovNikolay
Жыл бұрын
@@McNeelone я думаю он имел ввиду работу с DOM элементами , если сразу просят работать с ними ,то лучше сразу покинуть собеседование... Я так его понял
@Snezh88k
Жыл бұрын
@@KrivovNikolay бинарные деревья поиска
@user-vu6hn4ul2i
Жыл бұрын
@@plart2006 ну такой себе совет. Если ты умеешь крутить деревья, то почему бы и не покрутить? Если не умеешь, то да, можно сразу уходить: у тебя и у компании разные взгляды на то, что ты должен знать и уметь на той позиции, куда тебя собеседуют. И консенсус вряд-ли получится.
Почему ты таким устаревшим циклом пользуешься? И ещё вводишь в заблуждение новичков! А также тут многие пишут что таких задач нет на собесах! Зря потерянное время …
Чаще задвигают всякую теоретическую хрень типа прототипов и принципов ооп. Как говорится, особый js для собесов, который в реальной работе никогда не используется
@wisejs
2 жыл бұрын
Принципы ООП не связаны с js и их у любого программиста могут спросить
Искать максимум в массиве через сортировку - это дичь. Хуже неё только последний способ Math.max(...arr), приводящий к переполнению стека на длинном массиве. Автор, не учи джунов всякому плохому )
@carry-on-chaos4032
Жыл бұрын
а как правильно? я делал через reduce
@alexandroppolus
Жыл бұрын
@@carry-on-chaos4032 через reduce вполне норм. Ну или обычным циклом.
junior еще бы поверил для первой легкой задачки на собеседовании, но точно не мидл, это уровень интерна, не более
На собесе такое не просят решать. Это детсадовские задачи.
@benchik100
Жыл бұрын
😵😵😵 не лишайте меня мотивации.
const A = [1, 2, 3, 4, 5, 2, 1]; console.log([...new Set(A.filter((a) => A.length - A.filter((f) => f != a).length > 1))]);
array.reduce((acc:number, next:number) - Почему у меня аккумуляторы не работают? Все примеры из видео с аккумулятормаи у меня не пашут. Хотя reduce вот так работает: const array = [1, 2, 2, 4, 5, 6, 6, 100]; let sum = array.reduce(function (currentSum, currentNumber) { return currentSum + currentNumber } , 0)
function duplicate(nums) { return new Set(nums.filter(n => nums.indexOf(n) !== nums.lastIndexOf(n))) }
@wisejs
2 жыл бұрын
Крутое решение 👍
@Ushakov.M
2 жыл бұрын
Только Big O у решения большая
Зашёл увидел старющий как мир цикл и сразу закрыл видео 🤮