Pull to refresh

Comments 26

Проблема в восприятии новых функций/конструкций кроется в отсутствии ассоциаций с чем-либо уже понятым. Расписали отлично, спасибо!
Не пользуюсь. Специфика моего JS в том, что он запускается в IE разных версий и в некоторых версиях ещё не поддерживается…
Когда столкнулся со стрелочной функцией в чужом коде, довольно долго втыкал, что это такое… Хоть концепция лямбд мне и была знакома, но в JS она как — то слишком лаконична мне показалась…
IE разных версий и в некоторых версиях ещё не поддерживается…

Используйте babel + browserify, и ваш код будет чистым, современным, поддерживаемым. А если вдруг в вашей компании случится автобусный инцидент, вы будете востребованы на рынке.

UFO just landed and posted this here
Ну это то понятно, что не будет…
IE встраивается в конкретное приложение и на форме приложения выводит интерфейс.
Приложение писано не нами и нет внятных перспектив, что IE поменяют на что то ещё…
UFO just landed and posted this here
Лично я не пользуюсь, потому что в процессе разработки приходится то добавлять, то убирать команды внутри callback-функции. И индекс иногда то нужен, то нет.
Постоянно переписывать for на map и обратно — задалбывает.
А такие простые случаи, что указаны в посте, редко встречаются.
PS: к нижнему комментарию: если всё изначально указывать, то размер кода не сильно меньше, чем у for. Зато ещё эта скобка после }…
PPS: и постоянно чередовать стиль то for, то map — тоже как-то не очень.
И индекс иногда то нужен, то нет.

В callbackFn мапа вообще-то есть индекс.
то убирать команды внутри callback-функции

В чём проблема? Если неудобно со стрелочной функцией — передайте туда обычную.

Вы можете передать индекс в колбэк как второй параметр. В случае reduce — как третий.

Чтоб два раза не вставать: ещё в колбэк можно передать исходный массив.

Алло, указанные в статье функции поддерживаются начиная с IE9. О какой поддержке вообще идет речь?

Есть особенность map (и foreach), которую я не знал и столкнулся с проблемами — нет гарантии, что элементы будут обработаны последовательно. В моем случае просто переделал на стандартный цикл For и все встало на свои места
Хмм, тогда приношу свои извинения, видимо проблема была в асинхронности
Забыли добавить один нюанс. Если в методе .reduce() явно не задать значение в аккумулятор, то для аккумулятора будет использовано, первое значение переданного массива.
А у меня обычно в коллбеке ошибка возникала, если я забывал аккумулятор указать.
Возможно имелось в виду, не второй атрибут колбека — он как раз обязателен, а второй опциональный параметр, после колбека, который содержит начальное значение аккумулятора.
В примере с donations как раз такой случай и показан.
он как раз обязателен

Да сфигали? Ничего там не обязательно вообще.
[1,2,3].reduce(() => { console.log(`woo!`); })

Ну с точки зрения языка — нет.
А с целью суммирования элементов массива — можно пример без него?

Ну разумеется можно, потому что там еще два параметра есть:
[1,2,3,4].reduce((acc, _, index, src) => acc + src[index]);

но конечно не рекомендую так где-бы то ни было извращаться ради суммирования.
Я понял о чём речь, просто по воле случая, все мои редьюсеры критично зависели от валидной инициализации аккумулятора. Я сейчас напряжённо думаю, как так вышло…

Если привыкнуть, то выглядит очень удобно. Коротко и элегантно, но для меня все эти JS фишки никогда не будут удобочитаемыми.
Ключевое for сразу подразумевает о перечислении, независимо от языка и примерный смысл можно понять даже если с языком не работал, а в специфические сокращения у JS иногда приходится долго втыкать, если до этого плотно сидел на каком-нибудь python

в специфические сокращения у JS иногда приходится долго втыкать, если до этого плотно сидел на каком-нибудь python

Наоборот — тоже.
map, filter и reduce — базовые функции, которые есть в любом высокоуровневом языке, предоставляющем возможности функционального программирования. и python — не исключение. не понимаю, о каких «специфических сокращениях» идет речь…
подобное можно сказать только о яваскриптовом [].forEach(). тут соглашусь — действительно выглядит как костыль
const donations = [5, 20, 100, 80, 75];
let total = donations.reduce((total,donation) => {
   return total + donation;
});

const donations = [5, 20, 100, 80, 75];
let total = donations.reduce((total,donation) => {
   return total + donation;
}, 450);


Я бы вкинул вам свои 5 копеек :-), функция reduce в вашем случае дважды делает операцию сложения можно было на втором примере сказать что функция сложения может быть сохранена в переменную с идентификатором add и потом многократно использована в разных инструкциях где нужно сложение.

const donations = [5, 20, 100, 80, 75];
const add = (a,b) => a+ b;
let total = donations.reduce(add, 450);


Не увидел и еще одного из важнейших профитов от map, reduce, filter, sort — chain

// массив возрастов
// цель взять совершеннолетних и получить общий возраст :-)
const isAdult = age => age > 18;
const add = (a, b) => a + b;
 [15, 20, 60, 80, 95, 50, 45, 35].filter(isAdult).reduce(add, 0); // => 385


Та же я не услышал что все эти функции никак не изменяют изначальный массив и возвращают новый экземпляр массива.
Sign up to leave a comment.