Дима
Ну, прокрутить в голове что? =)
new Array(count).fill(null).map(...) Создаём массив ничего -> массив не трогаем, просто создаём индексы-> создаём нормальный массив Ну вот где-то здесь я завис)) Смысл теперь ясен, но я бы так всё равно не писал, сто процентов %)
Anonymous
Никаких ошибок — всё работает. =)
Anonymous
http://codepen.io/bigslycat/pen/vXNJmV?editors=0012
Cheslav
в чем разница если определить метод в функции конструкторе или после через prototype?
Mikhail
const items = new Array(count).fill(null) .map(index => blaBlaBla(index));
Лодэш некошерно использовать?
Mikhail
Там есть .times() если уж for писать слишком сложно
Anonymous
В prototype метод создаётся 1 раз, а в конструкторе — каждый раз при вызове конструктора.
Mikhail
ну там давно уже есть partial import
Mikhail
import _times from 'lodash/times'
Anonymous
Хм... Аргумент.
Anonymous
Спасибо.
Anonymous
class Times { constructor(callback) { this.callback = callback; } repeat(count) { return new Array(count).fill(null).map( (value, index) => this.callback(index) ); } }
Anonymous
Anonymous
Ой, пардон. У меня тоже так было.
Anonymous
Используй Array.from(Array(n))
Похоже, Array.from(new Array(count)) ничем принципиально не отличается от: new Array(count).fill(undefined).
Name
class Times { constructor(callback) { this.callback = callback; } repeat(count) { return new Array(count).fill(null).map( (value, index) => this.callback(index) ); } }
о ужас не хватает только названий пары паттернов в конструкторе и обёртывания этого всего в реакт компонент
Name
Я не понимаю, зачем нужен этот класс.
Name
Похоже, Array.from(new Array(count)) ничем принципиально не отличается от: new Array(count).fill(undefined).
А какое тебе требуется принципиальное отличие? Этот способ всё ещё делает не то, что надо?
Name
Это от того, что я не парю и ем мясо
Anonymous
Я не понимаю, зачем нужен этот класс.
Класс создан как аналогия _.times().
Name
Но зачем в данном случае нужна абстракция в виде класса?
Anonymous
Но зачем в данном случае нужна абстракция в виде класса?
Для удобства и краткости. А класс — затем, чтобы потом вызывать repeat() как мне вздумается.
Name
можно вынести это в npm модуль с названием из одной буквы, будет ещё короче а в качестве заполняемых значений нового массива передавать не значение или функцию, а класс, так будет ещё удобнее
Anonymous
А можно ещё выпить валерьянки.
Дима
Для удобства и краткости. А класс — затем, чтобы потом вызывать repeat() как мне вздумается.
function fillWith(fn){ return function(len) { var idx = 0 var result = Array(len) while (idx < len) { result[idx] = fn(idx) idx += 1 } return result } } Так тоже можно вызывать когда угодно, но без лишних классов. Быстрее этого варианта вряд ли получится
Anonymous
function fillWith(fn){ return function(len) { var idx = 0 var result = Array(len) while (idx < len) { result[idx] = fn(idx) idx += 1 } return result } } Так тоже можно вызывать когда угодно, но без лишних классов. Быстрее этого варианта вряд ли получится
Пардон. Здесь при каждом срабатывании fillWith() создаётся функция. Если её засунуть в прототип, то будет быстрее. Ну и fillWith() делает почти то же самое, что и класс, с одним отличием, что конструктор класса возвращает объект с одним свойством, а данная функция — другую функцию. Но в случае с классом функция, которая вызывает колбэк, создаётся единожды (при объявлении класса).
Anonymous
То есть fillWith() — это, по-сути, велик. Только более медленный.
Anonymous
Проще тогда просто писать function fillWith(callback, count) { ... }
Дима
То есть fillWith() — это, по-сути, велик. Только более медленный.
У тебя map, new, fill, анонимная функция с => внутри map, прототип, передача коллбэка, создание объекта и еще фигова тонна всего) А функция должна иметь замыкание с конкретным fn в любом случае
Дима
Это просто пример к "вызывать repeat() как мне вздумается"
Anonymous
У тебя map, new, fill, анонимная функция с => внутри map, прототип, передача коллбэка, создание объекта и еще фигова тонна всего) А функция должна иметь замыкание с конкретным fn в любом случае
Если написать твою fillWith() так же, но в виде класса, тио будет быстрее. Я не говорил, что конкретно моя реализация быстрее (она, в общем-то, на это и не претендует). Я говорил о том, что ты повёл себя непоследовательно — хотел оптимизировать, но допустил ошибку — твой код каждый раз будет делать работу, которую можно было сделать один раз.
Anonymous
У тебя map, new, fill, анонимная функция с => внутри map, прототип, передача коллбэка, создание объекта и еще фигова тонна всего) А функция должна иметь замыкание с конкретным fn в любом случае
То есть, еслит переписать твой пример в виде класса, то он будет работать быстрее: class Times { constructor(callback) { this.callback = callback; } repeat(len) { var idx = 0 var result = Array(len) while (idx < len) { result[idx] = this.callback(idx) idx += 1 } return result } }
Anonymous
Здесь repeat() создаётся только при объявлении класса. При создании его экземпляра, на repeat() создаётся ссылка в прототипе экземпляра.
Anonymous
В твоём примере анонимная функция создаётся столько раз, сколько ты вызываешь fillWith().
Дима
>так же, но в виде класса, тио будет быстрее Хахах, увы, но нет)
Anonymous
Ну ладно.
Anonymous
Babel полифилит fill?
Не знаю, что делает пакет babel-polyfill. Я использую babel только для синтаксиса. А для клиентских полифилов использую https://polyfill.io
Damir
Не знаю, что делает пакет babel-polyfill. Я использую babel только для синтаксиса. А для клиентских полифилов использую https://polyfill.io
Хорошая библиотека, но полифилит ли она с оглядкой на Babel? Некоторые функции Babel полифилит сам
Anonymous
Хорошая библиотека, но полифилит ли она с оглядкой на Babel? Некоторые функции Babel полифилит сам
Ну, посмотри код. Мне кажется, любой полифил должен проверять наличие.
Anonymous
А какие функции бабел полифилит при presets: ['es2015', 'es2016', 'react']?
Damir
Ну, посмотри код. Мне кажется, любой полифил должен проверять наличие.
Там проверка через useragent, полифилы подгружаются все для определяемого браузера
Anonymous
Там проверка через useragent, полифилы подгружаются все для определяемого браузера
Ну, одно дело, как они подгружаются, другое дело — как выполняются.
Damir
А какие функции бабел полифилит при presets: ['es2015', 'es2016', 'react']?
Сходу не скажу, но у меня были траблы всего с несколькими функциями, которые Babel не полифилит
Anonymous
Я думал, бабел только при истользовании определённого пакета полифилит. Осторожнее. Проверь своё приложение на IE8.
Anonymous
https://cdn.polyfill.io/v2/polyfill.js?features=all
Anonymous
// setImmediate (function (global, undefined) { "use strict"; if (global.setImmediate) { return; } ...
Anonymous
Всё нормально он полифилит. С проверкой.
Damir
Я думал, бабел только при истользовании определённого пакета полифилит. Осторожнее. Проверь своё приложение на IE8.
Имеешь в виду Babel-polyfill? Я обычно включал его по умолчанию и долго не разбирался, что он полифилит
Damir
Тема отличная, ещё бы доступ через npm и полифилы через browserlist
Anonymous
Дада. Его. Я не пользуюсь им, т.к. есть сервис. Лучше буду тянуть меньше кода.
Anonymous
Так есть же npm-пакет. Ты почитай доку-то.
Anonymous
Они на селф-хостинг это распространяют в том числе.
Damir
Да, круто. Была бы сказка, если бы ещё роутинг не нужно было ставить и все это как-то работало через один require))
Anton
Babel-polyfill громоздкий слишком
Anonymous
Это было бы весьма юзабельно для больших проектов, т.к. такому cdn'у явно лучше лежать на отдельной ноде.
Anonymous
Косяк может быть один: если разрешить кеширование, то файл может быть кеширован на чьём-нибудь прокси. В итоге если в первый раз файл попросил кто-нибудь с последним хромом, то прокси закеширует файл, который потом отдаст всем. В том числе и 8-му ослу.
Anonymous
Этого можно избежать, разрешив кеширование, но фронт должен присылать юзерагент браузера в виде гет-параметра. Тогда всё будет ок.
Damir
Можно как вариант, вставлять полифил в тело страницы после чтения юзерагента
Damir
Правда для ие весомо утяжелит страницу
Anonymous
Эу... =/
Damir
До 40кб в целом не критично
Anonymous
Нет. Там есть возможность задать юзерагент вручную, с помощью гет-параметра.
Anonymous
Пусть он кешируется.
Anonymous
Просто кешироваться будет индивидуально на 100%.
Anton
Ребят, чет я не пойму почему moment.js format('MMM') возвращает не September, а 099
Anton
oO
Anton
сталкивался кто?
Arseniy
September вроде возвращает format(‘MMMM’)
Arseniy
а MMM должен ‘Sep’
Anton
Так он выводит мне вовсе 099
Arseniy
а есть полный код?
Anton
moment(p.date).format("MMM")