Огромное спасибо за видео! Спустя целый день прокрастинации вместо "заучивания" написание своих методов map, forEach, filter, reduce, нахожу видео, которое и смотреть интересно, методы лучше объясняются, а следовательно, запоминаются:)) Cпасибо!
Благодарю за видео! Было б классно, если бы вы запилили видос на тему реализации паттернов проектирования, ну и вообще "разжевали" некоторые из них на примерах, У вас это суперски получается!!!
Сергей, спасибо вам за труды -- огромное & человеческое и так кушать захотелось, что переночевать негде, это я к тому, что хорошо бы ещё код скинуть, вы как- то обмолвились об этом , хотя конечно же, можно и самoму всё это за вами ручками повторить : )
2 Если опустить проверки,такой код имеет место быть? Array.prototype.reduce2 = function (callback, inicialState = this[0]) { for (let i = arguments.length < 2 ? 1 : 0; i < this.length; i++) { inicialState = callback(inicialState, this[i], i, this); } return inicialState; };
Отличный стрим. Как раз совсем недавно изучил прототипы. Написал свои варианты реализации методов из этого видео: 1) Array.prototype.forEach Array.prototype.forEach2 = function(callback, thisArg) { if (typeof callback !== 'function') throw new Error("Callback is not a function"); let ctx = thisArg ?? this; for (let i = 0; i < this.length; i++) { if (this[i] === undefined) continue; callback.call(ctx, this[i], i, this); } } Полагаю, что проверка вида if (this == null) не нужна, так как null/undefined не имеют методов и попытка доступа к свойствам таких значений возвратит ошибку по умолчанию: null.forEach2(); // TypeError: Cannot read property 'forEach2' of null 2) Array.prototype.filter Array.prototype.filter2 = function(callback, thisArg) { if (typeof callback !== 'function') throw new Error('Callback is not a function'); let ctx = thisArg ?? this; let result = []; for (let i = 0; i
Вернулся к этому видео снова и написал новые варианты решения (так как они похожи, напишу вариант с forEach): forEach // Все же я был не совсем прав насчет проверки на null и undefined. Она позволяет обработать вызовы с call или apply так же, как встроенная реализация. Array.prototype.forEach2 = function(callback, thisArg) { if (typeof callback !== 'function') throw new TypeError(`${callback} is not a function`);
const ctx = thisArg ?? this; if (ctx === null || ctx === undefined) throw new TypeError('Array.prototype.forEach2 called on null or undefined'); for (let i = 0; i < ctx.length; i++) { if (!(i in ctx)) continue; // Если значение пустое (empty) callback.call(ctx, ctx[i], i, this); } } P.S. В reduce надо делать проверку на arguments.length в любом случае (в моем решении выше ее нет).
Здравствуйте. А будет разница если для метода map использовать не newArray[i] = callback.call( context, this[i], i , o) просто newArray.push(callback.call( context, this[i], i , o))
@@krasniy_traktor ааа понял. Нет не пофиксил. Это случилось с апдейтом именно на свежую версию node.js. Но там нет ограничения на 3 элемента - там просто выводит все но по 3 в строке.
На самом деле - да думаю O[i] был бы даже лучше с точки зрения консистентности подхода - раз мы уже завели O, то почему бы его не использовать. Но в целом разницы я не вижу совсем - не могу даже придумать edge case когда эта разница была бы видна.
По поводу forEach: 1) при вызове .call(null, ....) не выводит ошибку в стиле "called on null or undefined", как в оригинальном методе 2) this в forEach по умолчанию window, в нашей же реализации это наш массив
Благодарю за дополнения, но цель была не скопировать стандартный полифил с кучей эдж кейсов. А именно написать такую реализацию которую потом можно на собеседовании легко воспроизвести. Так как это очень частый вопрос.
в строгом режиме первый пункт отрабатывает, а как сделать так, чтобы и не в строгом режиме выдавало ошибку про null или undefined как в оригинальном методе?
Огромное спасибо за ваш труд и потерянные время ради нас 👏
Огромное спасибо за видео! Спустя целый день прокрастинации вместо "заучивания" написание своих методов map, forEach, filter, reduce, нахожу видео, которое и смотреть интересно, методы лучше объясняются, а следовательно, запоминаются:)) Cпасибо!
Супер! Рад, что помог) Успехов!
Spasiba vam Sergey ochen poleznoe video,
Рад слышать! :)
@@frontendscience Zdrastvuyte Serge esho raz, qogda budet qurs po 'react' u, prastit zato chto peshu na latinskom, u menya ruskiy gramatika plahoy
Спасибо большое Сергей. Было очень понятно. Очень очень помогло ваш урок, и прям то что надо до интервью)
спасибо:)🎄
Круть, спасибо! Оч интересно - так держать!))
Спасибо за поддержку! :)
Спасибо за отличное видео. Очень интересно слушать твои объяснения. Успехов тебе! Береги себя.
Спасибо большое! То, что было нужно!
Сергей, у Вас уникальный контент на ютуб, большое спасибо за прекрасную подачу! Успехов Вам во всем!🙂
Благодарим за поддержку!
Благодарю за видео! Было б классно, если бы вы запилили видос на тему реализации паттернов проектирования, ну и вообще "разжевали" некоторые из них на примерах, У вас это суперски получается!!!
Сергей ты красавчик .все супер!
Спасибо! Классный контент.
Благодарю за поддержку.
Автолайк улетел! Ждем завтрашний стрим!
Сергей, спасибо вам за труды -- огромное & человеческое и так кушать захотелось, что переночевать негде,
это я к тому, что хорошо бы ещё код скинуть, вы как- то обмолвились об этом , хотя конечно же, можно и самoму всё это за вами ручками повторить : )
Ссылку приложил в описание: codepen.io/puzankov/pen/VwPjpPm?editors=0010
Класс, спасибо!
Спасибо за полезный контент)
Рад, что было полезно, Руслан! Спасибо и Вам)
Отлично👓❗Даже про нативные методы кое что новое узнал 👍🆒
Класс! Рад что было полезно! 👍
отличное видео, спасибо
Благодарю! Приятно!
Спасибо
1 Спасибо.
45:35 только .reduce() вернет не новый массив, а новое значение, там нет массива. А видео крутое)
Да, я оговорился.
2 Если опустить проверки,такой код имеет место быть?
Array.prototype.reduce2 = function (callback, inicialState = this[0]) {
for (let i = arguments.length < 2 ? 1 : 0; i < this.length; i++) {
inicialState = callback(inicialState, this[i], i, this);
}
return inicialState;
};
Отличный стрим. Как раз совсем недавно изучил прототипы.
Написал свои варианты реализации методов из этого видео:
1) Array.prototype.forEach
Array.prototype.forEach2 = function(callback, thisArg) {
if (typeof callback !== 'function') throw new Error("Callback is not a function");
let ctx = thisArg ?? this;
for (let i = 0; i < this.length; i++) {
if (this[i] === undefined) continue;
callback.call(ctx, this[i], i, this);
}
}
Полагаю, что проверка вида if (this == null) не нужна, так как null/undefined не имеют методов и попытка доступа к свойствам таких значений возвратит ошибку по умолчанию: null.forEach2(); // TypeError: Cannot read property 'forEach2' of null
2) Array.prototype.filter
Array.prototype.filter2 = function(callback, thisArg) {
if (typeof callback !== 'function') throw new Error('Callback is not a function');
let ctx = thisArg ?? this;
let result = [];
for (let i = 0; i
Вернулся к этому видео снова и написал новые варианты решения (так как они похожи, напишу вариант с forEach):
forEach
// Все же я был не совсем прав насчет проверки на null и undefined. Она позволяет обработать вызовы с call или apply так же, как встроенная реализация.
Array.prototype.forEach2 = function(callback, thisArg) {
if (typeof callback !== 'function') throw new TypeError(`${callback} is not a function`);
const ctx = thisArg ?? this;
if (ctx === null || ctx === undefined) throw new TypeError('Array.prototype.forEach2 called on null or undefined');
for (let i = 0; i < ctx.length; i++) {
if (!(i in ctx)) continue; // Если значение пустое (empty)
callback.call(ctx, ctx[i], i, this);
}
}
P.S. В reduce надо делать проверку на arguments.length в любом случае (в моем решении выше ее нет).
крутяк
Рад, что понравилось)
Здравствуйте. А будет разница если для метода map использовать не newArray[i] = callback.call( context, this[i], i , o) просто newArray.push(callback.call( context, this[i], i , o))
Сергей, здравствуйте. Вопрос не по теме:
А вы пофиксили вывод в консоль не более 3-х элементов в webStorm ?
Если да, то каким образом?
Ээээ- не сталкивался с такой проблемой.
@@frontendscience 1:18:47
@@krasniy_traktor ааа понял. Нет не пофиксил. Это случилось с апдейтом именно на свежую версию node.js. Но там нет ограничения на 3 элемента - там просто выводит все но по 3 в строке.
Сергей, сделай магазин на React & Next . Шутка😂 - просто это классическая просьба js блогеру
Может как-то на субботнем стриме и сделаем - и это не шутка :)
@@frontendscience А вот и сделай! 😁 Спорим, что просмотров будет минимум в два раза больше💯
@@jorgen5462 🤩
Скажите а почему в колбэке написан this[i]? Не правильней ли было писать - callback.call(context, O[i], i, O) ?
На самом деле - да думаю O[i] был бы даже лучше с точки зрения консистентности подхода - раз мы уже завели O, то почему бы его не использовать. Но в целом разницы я не вижу совсем - не могу даже придумать edge case когда эта разница была бы видна.
По поводу forEach:
1) при вызове .call(null, ....) не выводит ошибку в стиле "called on null or undefined", как в оригинальном методе
2) this в forEach по умолчанию window, в нашей же реализации это наш массив
Благодарю за дополнения, но цель была не скопировать стандартный полифил с кучей эдж кейсов. А именно написать такую реализацию которую потом можно на собеседовании легко воспроизвести. Так как это очень частый вопрос.
в строгом режиме первый пункт отрабатывает, а как сделать так, чтобы и не в строгом режиме выдавало ошибку про null или undefined как в оригинальном методе?
Как код запускать в шторме?
вторая кнопка мыши на файле - Run file.js Или Ctrl+Shift+R
@@frontendscience в том то и дело что нефига, на шифт кнтрл r у меня окно реплейса, а кноки run в контекстном меня вообще нет
@@Nikitosss91 значит не настроен node.js в webstorm
Когда Мармок успел перейти на Frontend?
ниче не понятно 🥲